目前我正在返回所有具有日期范围的项目列表。部分约会已经过期,其他约会尚未发生。我正在显示尚未过期的约会。但我想检查所有的任命是否已过期,然后显示第一项。
var curApt = myAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow).First();
如果myAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow) == null
var curApt = myAppts.First();
我如何构建这个,所以我考虑两种情况?
答案 0 :(得分:4)
FirstOrDefault
和null 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,如果是,则执行第二个语句。