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;
        
        while (true)
        {        
            if (date.DayOfWeek != DayOfWeek.Saturday &&
                date.DayOfWeek != DayOfWeek.Sunday &&
                holidays.All(holiday => holiday.Day != date.Day ||
                                        holiday.Month != date.Month))
            {
                yield return date;
            }
            
            date = date.AddDays(1);
        }
    }

Note that this iterator is endless, so you should be caution 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][1]


  [1]: https://dotnetfiddle.net/W3dalr