33

重複の可能性:
LINQ: Max or Default?

DateTime変数をフィルタリングするLINQがいくつかあります。

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 に答える