可能重复:
LINQ: Max or Default?
我有一些LINQ来过滤DateTime
vars。
List<DateTime> lst1 = new List<DateTime>();
//.... add DataTime here
var d = lst1.Where(q => q <= DateTime.Now).Max();
如果我没有匹配项,则会发生异常。
我需要空d
或至少null
,我根本不需要例外。
我该如何解决?
谢谢!
答案 0 :(得分:71)
尝试
var d = lst1.Where(q => q <= DateTime.Now).DefaultIfEmpty().Max();
如果没有匹配项,您的结果现在将包含DateTime.MinValue
答案 1 :(得分:5)
如果源没有任何元素,则Max()会抛出ArgumentNullException。您可以编写一个扩展方法来检查这个并返回null(或任何你想要的)如果没有任何元素。
public static Nullable<DateTime> MaxOrNull(this IEnumerable<DateTime> source)
{
if (source.Count() == 0)
return null;
else
return source.Max();
}
答案 2 :(得分:1)
我喜欢:
var d = lst1.Where(q => q <= DateTime.Now).OrderByDescending(q => q.DateField).FirstOrDefault();
如果列表为空,这将返回null。