33

可能重复:
LINQ:最大还是默认?

我有一些 LINQ 来过滤DateTime变量。

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

 //.... add DataTime here

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

如果我没有匹配的项目,则会发生异常。

我需要清空d,或者至少null我不需要这里的异常。

我该如何解决?

谢谢!

4

3 回答 3

82

尝试

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

DateTime.MinValue如果没有匹配项,您的结果现在将包含

于 2012-08-09T13:14:05.320 回答
5

如果源没有任何元素,Max() 将引发 ArgumentNullException。您可以编写一个扩展方法来检查这一点,如果没有任何元素,则返回 null(或任何您想要的)。

public static Nullable<DateTime> MaxOrNull(this IEnumerable<DateTime> source)
{
    if (source.Count() == 0)
        return null;
    else
        return source.Max();
}
于 2012-08-09T13:29:42.010 回答
1

我喜欢:

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

如果列表为空,这将返回 null。

于 2012-08-09T13:30:10.057 回答