使用LINQ确定序列不包含任何元素

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

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

 List lst1 = new List(); //.... add DataTime here var d = lst1.Where(q => q <= DateTime.Now).Max(); 

如果我没有匹配项,则会发生exception。

我需要得到空d或至少为null ,我根本不需要例外。

我该如何解决?

谢谢!

尝试

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

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

如果源没有任何元素,Max()会抛出ArgumentNullException。 如果没有任何元素,您可以编写一个检查此方法的扩展方法并返回null(或任何您想要的)。

 public static Nullable MaxOrNull(this IEnumerable 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。