Я пытаюсь отфильтровать календарь (список дат) по дневному номеру, но борюсь за конкретный сценарий!Отфильтровать список дат по дате
В календаре первоначально будут указаны все даты в указанном диапазоне, скажем, 31 января 2013 года - 31 января 2015 года. Я хотел бы отфильтровать этот список, чтобы содержать только даты, которые соответствуют числу первого дня в календаре, например, если первый день в календаре 25, новый фильтруется календарь вернулся бы:
- 25 Февралю +2013
- 25 марта 2013
- 25 апреля 2013
.. И т.п.
Это первый пример достаточно просто с помощью LINQ
var calendar = ...code to get calendar from DB.
//Get Day Number of First Entry in Calendar (31st for example)
int day = calendar.Dates.Select(d => d.Date.Day).First();
//Filter the rest of the calendar by this date.
return new Calendar
{
Dates = calendar.Dates.Where(c => c.Date.Day == day).ToList()
};
я получаю в трудности при переходе, скажем, 31. Мое требование, так что это возвращается:
- 31 Jan 2013
- 28 февраля 2013
- 30 апреля 2013
- 31 мая 2013
... и т.д.
Какой самый лучший способ для достижения этой цели? Он клюет мой мозг в среду утром!
Я хотел бы, если это вообще возможно для ответа быть совершенным однострочник LINQ заявление :)
Большое спасибо,
Alex
Можете ли вы предоставить год, который будет использоваться? –
Итак, вы действительно не хотите, чтобы дата была днем 31, но в последний день любого месяца? Возможно, этот метод поможет: 'bool IsLastOfMonth (DateTime date) {return date == new DateTime (date.Year, date.Month, 1) .AddMonths (1) .AddDays (-1); } '(не тестировалось) – Corak
. Отфильтрованный календарь, скорее всего, будет содержать диапазон дат, охватывающий 3-5 лет, скажем, 2012-2015 гг. со всеми датами между ними. Отвечает ли это на ваш вопрос? – Huntsman