2016-10-14 25 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();