检查null返回的项目

时间:2013-08-07 20:10:47

标签: c# linq

目前我正在返回所有具有日期范围的项目列表。部分约会已经过期,其他约会尚未发生。我正在显示尚未过期的约会。但我想检查所有的任命是否已过期,然后显示第一项。

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 个答案:

答案 0 :(得分:4)

FirstOrDefaultnull coalescing operator (??)

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

但是,如果您有一个默认值来显示是否没有约会,那么您可以使这更容易出现异常,您可以链接空合并运算符:

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

答案 1 :(得分: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-coalescing operator (??)来简洁:

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

答案 2 :(得分:1)

听起来你想在这里使用.FirstOrDefault()

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

答案 3 :(得分:1)

使用FirstOrDefault()而不是First(),并在第一个语句之后检查curApt是否为null,如果是,则执行第二个语句。