我有一个关于coalesce和lambda表达式的问题。我从SQLite数据库中读取了一些记录,但并不总是有一些记录。例如
return db.GetItems<Appointment>().Where(l => l.AppointmentId == appointmentId).First();
如果没有约会我收到错误
序列不包含元素
我同意。然后我试着改变表达式
return db.GetItems<Appointment>()?.Where(l => l.AppointmentId == appointmentId)?.First();
我想第一个?
如果没有约会,函数返回null
。如果?
没有预约,我会出于同样的原因插入第二个where
。
然后我的问题是:我错了什么?有可能吗? 提前谢谢
答案 0 :(得分:2)
使用FirstOrDefault
代替First
。如果序列包含否元素,则返回默认值。而且你也不需要空条件运算符。
return db.GetItems<Appointment>()
.Where(l => l.AppointmentId == appointmentId)
.FirstOrDefault();
答案 1 :(得分:2)
问题是,当您致电First
时序列为空,而不是null
。你想要的是FirstOrDefault
,当它被调用的序列是空的时,它将导致默认值(在这种情况下为null
)。
return db.GetItems<Appointment>()
.Where(l => l.AppointmentId == appointmentId)
.FirstOrDefault();
在GetItems
之后你也不需要空条件运算符,因为它不应该返回null
,可能是空序列,但不是null
。