Подтвердить что ты не робот

LINQ: Последовательность не содержит элементов

Возможный дубликат:
LINQ: Макс. или по умолчанию?

У меня есть LINQ для фильтрации DateTime vars.

List<DateTime> lst1 = new List<DateTime>();

 //.... add DataTime here

var d = lst1.Where(q => q <= DateTime.Now).Max();

И если у меня нет согласованного элемента, это исключение.

Мне нужно получить пустой d или по крайней мере null, и здесь вообще не нужно исключение.

Как я могу это исправить?

Спасибо!

4b9b3361

Ответ 1

Try

var d = lst1.Where(q => q <= DateTime.Now).DefaultIfEmpty().Max();

Теперь ваш результат будет содержать DateTime.MinValue, если нет совпадений

Ответ 2

Max() выдает исключение ArgumentNullException, если источник не имеет никаких элементов. Вы можете написать метод расширения, который проверяет это, и возвращает нуль (или что угодно), если нет каких-либо элементов.

public static Nullable<DateTime> MaxOrNull(this IEnumerable<DateTime> source)
{
    if (source.Count() == 0)
        return null;
    else
        return source.Max();
}

Ответ 3

Мне нравится:

var d = lst1.Where(q => q <= DateTime.Now).OrderByDescending(q => q.DateField).FirstOrDefault();

Это вернет null, если список пуст.