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: 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][1] [1]: https://dotnetfiddle.net/W3dalr