使用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。