3

現在、すべてのアイテムのリストを日付範囲で返しています。予定の一部は期限が切れており、他の予定はまだ行われていません。まだ有効期限が切れていない予定を表示しています。しかし、すべての予定が期限切れかどうかを確認してから、最初のアイテムを表示したいと思います。

var curApt = myAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow).First();

もしもmyAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow) == null

var curApt = myAppts.First();

これをどのように構成すれば、両方のケースを考慮することができますか?

4

4 に答える 4

4

FirstOrDefaultnull coulescing operator??

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow)
             ?? myAppts.First();

ただし、予定がまったくない場合に表示するデフォルト値がある場合は、この例外をさらに少なくすることができます。そのために null 合体演算子を連鎖させることができます。

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow)
             ?? myAppts.FirstOrDefault() ?? yourDefault;
于 2013-08-07T20:12:51.713 に答える
2

FirstOrDefault次の方法を使用できます。

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow);

有効期限が切れていない最初の予定を見つけるnull場合、またはすべての予定が期限切れの場合。したがって、その場合に最初の予定にデフォルト設定するには、次のように使用できます。

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow);
if (curApt == null) 
{
    curApt = myAppts.First();
}

または、簡潔にするためにnull 合体演算子 ( ??)を使用できます。

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow)
          ?? myAppts.First();
于 2013-08-07T20:13:28.430 に答える
1

First() の代わりに FirstOrDefault() を使用し、最初のステートメントの後で curApt が null かどうかを確認し、そうであれば 2 番目のステートメントを実行します。

于 2013-08-07T20:13:34.053 に答える
1

ここで使用したいようです.FirstOrDefault()

var curApt = myAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow).FirstOrDefault();
if (curApt == null) {
    // no expirations
    curApt = myAppts.First();
}
于 2013-08-07T20:13:15.523 に答える