2016-10-14 26 views
1

我有一个关于合并和lambda表达式的问题。我正在从SQLite数据库读取一些记录,但并不总是有一些记录。例如使用lambda表达式和合并获取数据

return db.GetItems<Appointment>().Where(l => l.AppointmentId == appointmentId).First(); 

如果没有约会,我收到一条错误

序列不包含任何元素

我同意。然后我试图如果没有约定函数返回null改变表达

return db.GetItems<Appointment>()?.Where(l => l.AppointmentId == appointmentId)?.First(); 

我想用第一?。如果where没有预约,我插入第二个?出于同样的原因。

那么我的问题是:我错了什么?有可能这样做吗? 谢谢您提前

回答

2

的问题是,当你调用First,不在于它是null序列为空。你想要的是FirstOrDefault这将导致默认值(在这种情况下为null),当它被调用的序列是空的。

return db.GetItems<Appointment>() 
    .Where(l => l.AppointmentId == appointmentId) 
    .FirstOrDefault(); 

你也不需要GetItems后空条件运算符,因为它不应该返回null,空序列也许,但不是null

+0

你是对的!我不知道为什么我没有使用它。我在我的项目的另一部分使用此代码...我越来越老:) – Enrico

2

使用FirstOrDefault而不是First。如果序列包含元素,它将返回默认值。而且你也不需要null条件运算符。

return db.GetItems<Appointment>() 
     .Where(l => l.AppointmentId == appointmentId) 
     .FirstOrDefault();