2017-11-30 14 views
-1

リストから日付をフィルタリングしてMax Dateを返すLambdaクエリが必要です。リストがフィルタを満たさない場合、null値が返されます。 >DateのMax()を返すLambdaクエリ、またはC#でnullを返す

var a = Dates.Where(x => x >= DateTime.Now).Select(x => x); 
if(a.Count > 0) 
{ 
    return a.Max(); 
} 
else return null; 

値が返されたDateTimeの中にはある - これは、短いバージョン私のコードする必要がありますか? "埋め込みステートメントは宣言またはラベル付きステートメントではありません"というエラーを示す形式です。

+0

3進演算子を使用 –

+0

なぜ、より短いバージョンが必要ですか?あなたはおそらく、コンパイルするバージョンが必要です。 'a'は' Count'プロパティを持っていません。これには、Count()メソッドがあります.Ericが提案しようとしているように、これは非常に良いアプローチではありません。あなたはそれに*項目があるかどうかを知りたいだけです。 –

+4

私は、ペニーをいくつでも入れることができる瓶があります。あなたへの私の質問は:瓶にペニーはありますか?今、それについて考えてみましょう:**質問に答えるためにペニーを数えなければなりませんか? –

答えて

1
var Dates = new List<DateTime>(); 

DateTime? max = Dates.Where(x => x >= DateTime.Now) 
    .Select(x => (DateTime?) x) 
    .DefaultIfEmpty(null) 
    .Max(); 

Console.WriteLine(max == null ? "null" : "not null"); 

あなたはあなたのリストがDateTimeで構成されている場合は、Nullable<DateTime>一つの方法または別に結果をキャストする必要があります。

編集:@RogerStewartがコメントで述べたように、キャストを実行するにはSelectステートメントの代わりにCast<DateTime?>()を使用できます。

+1

好みに応じて、 'Select()'の代わりに '()'を使うことができます。 –

関連する問題