First, you should separate a process of parsing your input from your business logic. So, your first step is to convert your holidays input to a structure you'll be working with. So, let's say you have a List<Holiday>
where
public struct Holiday
{
public readonly int Month;
public readonly int Day;
public Holiday(int month, int day)
{
Month = month;
Day = day;
}
}
Now, in your place I'd start with implementation of something that enumerates working days like so:
public static IEnumerable<DateTime> GetWorkingDays(DateTime startDate, List<Holiday> holidays)
{
var date = startDate;
for (;;date = date.AddDays(1))
{
if (date.DayOfWeek != DayOfWeek.Saturday &&
date.DayOfWeek != DayOfWeek.Sunday &&
holidays.All(holiday => holiday.Day != date.Day ||
holiday.Month != date.Month))
{
yield return date;
}
}
}
Note that this iterator is endless, so you should be cautious enumerating it.
Now, your problem can be solved with just one line
var result = GetWorkingDays(orderDate, holidays).Skip(workingDays).First();
Complete example here: https://dotnetfiddle.net/W3dalr