Получить данные с помощью db с выражением лямбда и объединить

У меня есть вопрос об объединении и лямбда-выражении. Я читаю из базы данных SQLite некоторые записи, но не всегда есть некоторые из них. Например

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

Если нет назначения, я получаю сообщение об ошибке

Последовательность не содержит элементов

Согласен. Затем я попытался изменить выражение

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

Я думал? nullесли нет назначения, функция возвращает ?. Я вставил второй whereпо той же причине, если Firstнет назначения.

Тогда мой вопрос: что я ошибся? Можно ли это сделать? заранее спасибо

c#,linq,sqlite,lambda,

1

Ответов: 2


2 принят

Проблема в том, что последовательность вызывается, когда вы звоните null, а не то, что она есть FirstOrDefault. То, что вы хотите null, приведет к тому, что значение по умолчанию (в этом случае ), когда последовательность, которую он вызывает, пуст.return db.GetItems<Appointment>() .Where(l => l.AppointmentId == appointmentId) .FirstOrDefault();

GetItems

Вы также не нуждаетесь в нулевом условном операторе после того, nullкак он не должен возвращаться FirstOrDefault, возможно, пустая последовательность, но не null.


2

Используйте Firstвместо First. Она возвращает значение по умолчанию , если последовательность не содержит ни одного элемента. А также вам не нужен нулевой условный оператор.

return db.GetItems<Appointment>()
         .Where(l => l.AppointmentId == appointmentId)
         .FirstOrDefault();
C #, LINQ, SQLite, лямбда,
Похожие вопросы