Ответ 1
Try
var d = lst1.Where(q => q <= DateTime.Now).DefaultIfEmpty().Max();
Теперь ваш результат будет содержать DateTime.MinValue
, если нет совпадений
Возможный дубликат:
LINQ: Макс. или по умолчанию?
У меня есть LINQ для фильтрации DateTime
vars.
List<DateTime> lst1 = new List<DateTime>();
//.... add DataTime here
var d = lst1.Where(q => q <= DateTime.Now).Max();
И если у меня нет согласованного элемента, это исключение.
Мне нужно получить пустой d
или по крайней мере null
, и здесь вообще не нужно исключение.
Как я могу это исправить?
Спасибо!
Try
var d = lst1.Where(q => q <= DateTime.Now).DefaultIfEmpty().Max();
Теперь ваш результат будет содержать DateTime.MinValue
, если нет совпадений
Max() выдает исключение ArgumentNullException, если источник не имеет никаких элементов. Вы можете написать метод расширения, который проверяет это, и возвращает нуль (или что угодно), если нет каких-либо элементов.
public static Nullable<DateTime> MaxOrNull(this IEnumerable<DateTime> source)
{
if (source.Count() == 0)
return null;
else
return source.Max();
}
Мне нравится:
var d = lst1.Where(q => q <= DateTime.Now).OrderByDescending(q => q.DateField).FirstOrDefault();
Это вернет null, если список пуст.