使用带有lambda表达式和coalesce的db获取数据

时间:2016-10-14 12:08:21

标签: c# linq sqlite lambda

我有一个关于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

然后我的问题是:我错了什么?有可能吗? 提前谢谢

2 个答案:

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