#c#
#c#
Вопрос:
У меня есть общий список дат и времени
List<DateTime> **PreviousDates** = //Some List of Dates
Теперь я хочу получить все даты в списке PreviousDates, месяц и год которых равны месяцу и году данной даты. независимо от того, какой день и время…
Я попытался использовать список.Содержит метод (), но он проверяет все части даты, я хочу проверить только месяц и год..
Помогите мне!
Спасибо, Прадип
Ответ №1:
Вы можете создавать DateTime
значения для начала и конца интервала:
DateTime start = new DateTime(GivenDate.Year, GivenDate.Month, 1);
DateTime end = start.AddMonths(1);
Теперь вы можете легко выбирать элементы, которые находятся внутри интервала:
List<DateTime> inside =
PreviousDates
.Where(d => d >= start amp;amp; d < end)
.ToList();
(Вы, конечно, могли бы сравнить значения GivenDate.Year
и GivenDate.Month
с d.Year
и d.Month
в Where
, но это более сложное и менее эффективное условие.)
Комментарии:
1. Я думаю, что это сложнее понять, поскольку в нем явно не указано его назначение. Кроме того, крошечная ошибка, это должно быть addMonth s .
2. @Joey: Спасибо, исправил ошибку. Я понимаю, что вы можете считать это немного более сложным, чем нужно, но гораздо более гибким. Если вместо этого вы хотите получить даты, охватывающие два или три месяца, это очень просто с помощью этого кода, но это становится намного сложнее, если вы сравниваете значения года и месяца.
Ответ №2:
Вам нужно использовать метод Where . Он отфильтрует список, и вы сможете сравнить год и месяц с текущей датой.
DateTime currentDate = DateTime.Now;
var filteredDates = previousDates.Where(
d => d.Year == currentDate.Year amp;amp; d.Month == currentDate.Month);
Комментарии:
1. Не требуется . Есть много других способов сделать это.
Ответ №3:
Вы могли бы использовать LINQ для возврата IEnumerable
PreviousDates.Where(d => d.Month == month amp;amp; d.Year == year);
Комментарии:
1. Отсутствует конечная скобка и точка с запятой
Ответ №4:
Вы можете попробовать что-то вроде
DateTime criteria = DateTime.Today;
List<DateTime> filtered = previousDates.Where(dt => dt.Month == criteria.Month amp;amp; dt.Year == criteria.Year).ToList();
Комментарии:
1. Не используйте
DateTime.Today
непосредственно в запросе. Он может измениться на полпути запроса, что даст вам действительно странный результат. Сохраните его в переменной и используйте переменную в запросе.
Ответ №5:
previousDates.Where(d => d.Month == refDate.Month amp;amp; d.Year == refDate.Year);