Проверьте наличие c дней в заданном диапазоне заданных недель и добавьте в список - PullRequest
0 голосов
/ 06 февраля 2020

Что было бы лучшим выбором для получения и возврата списка указанных c дат в интервале 3 недели?

Мое намерение состоит в том, чтобы создать даты доставки на основе данных дней, когда они доступны в центре доставки.

public List<DayOfWeek> DeliveryDays { get; set; }

DeliveryDays содержит заданные значения от 0-6 (0 - воскресенье, 1 понедельник и т. Д. c.)

Я хочу получить эти значения, пропустите их через 3 недели следующих дат и верните эти дни доставки в виде списка (так что только те центры могут заказывать в определенные дни).

Вот что у меня есть:

public List<DateTime> CalculateAvailableDeliveryDates()
        {

            //Loop through 3 weeks of days
            DateTime today = DateTime.Today;                                                            //Specify today's date
            DateTime totalDateCount = today.AddDays(1);                                                 //Plus one day on each time counted

            var dates = Enumerable.Range(0, 21).Select(days => totalDateCount.AddDays(days)).ToList();  //Count from 0 to 21 (3 weeks worth of days). On each count, run totalDateCount

            //if exists in deliveryDayList
                //add to dates via dates.Add func

            if (DeliveryDays.Contains(DayOfWeek.Monday))
            {
                //action
            } //and so on for each day

            //return specific dates from date range
            return dates;
        }

В настоящее время я получаю показания 21 дня. Оператор if ничего не делает и служит только примером моей логики c.

Лучшим методом будет: вместо того, чтобы сначала получить список, выполнить проверку и вложить операторы if / case на основе Даты доставки по центру, а затем вернуть их в список?

Заранее спасибо.

1 Ответ

2 голосов
/ 06 февраля 2020

Учитывая список DayOfWeek, вы можете выбрать все даты в следующих 21 днях, которые соответствуют одному из этих дней недели, используя System.Linq. Enumerable.Range выбирает диапазон чисел, Select затем выбирает группу DateTime объектов, представляющих Today плюс некоторое количество дней, а Where используется для фильтрации результатов, сравнивая DayOfWeek для каждая дата, чтобы увидеть, существует ли она в DeliveryDays:

List<DayOfWeek> DeliveryDays = new List<DayOfWeek>();

public List<DateTime> GetAvailableDeliveryDates()
{
    // 1. Get a range of numbers representing the days to add
    //      to today, which will make up our range of dates
    // 2. Select a date using Today.AddDays for each number 
    // 3. Filter on only days which are contained in DeliveryDays

    return Enumerable.Range(0, 21)  // Define the range           
        .Select(i => DateTime.Today.AddDays(i))  // Select the range
        .Where(date => DeliveryDays.Contains(date.DayOfWeek))  // Filter the range
        .ToList();
}
...