2016-10-14 3 views
1

Ich habe eine Frage über Koaleszenz und Lambda-Ausdruck. Ich lese aus einer SQLite-Datenbank einige Datensätze, aber nicht immer gibt es einige von ihnen. Zum BeispielErhalten Sie Daten mit db mit Lambda-Ausdruck und koaleszieren

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

Wenn es keine Verabredung erhalte ich einen Fehler

Sequenz keine Elemente enthält

Ich bin damit einverstanden. Dann habe ich versucht, die Expression

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

ich mit ersten ? dachte sich ändern, wenn es keinen Termin gibt die Funktion Rückkehr null. Ich habe die zweite ? aus dem gleichen Grund eingefügt, wenn die where keine Verabredung sind.

Dann ist meine Frage: was habe ich falsch gemacht? Ist es möglich, das zu tun? Vielen Dank im Voraus

Antwort

2

Das Problem ist, dass die Sequenz leer ist, wenn Sie First nennen, nicht, dass es null ist. Was Sie wollen, ist FirstOrDefault, was zu dem Standardwert (in diesem Fall null) führt, wenn die aufgerufene Sequenz leer ist.

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

Sie brauchen auch nicht die Null-Konditionaloperator nach GetItems, da es nicht null zurückkehren sollte, eine leere Sequenz vielleicht, aber nicht null.

+0

Sie haben Recht! Ich weiß nicht, warum ich es nicht benutzt habe. Ich verwende diesen Code in einem anderen Teil meines Projekts ... Ich werde alt :) – Enrico

2

Verwenden Sie FirstOrDefault anstelle von First. Sie gibt den Standardwert zurück, wenn die Sequenz keine Elemente enthält. Und Sie brauchen auch nicht den Operator mit der Nullbedingung.

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