Ich möchte die maximale ID aus einer Tabelle mit Dapper.net zurückgeben
var x = connection.Query<int>("SELECT max(val) FROM info").FirstOrDefault();
Das funktioniert - wenn keine Zeile existiert, bekomme ich eine
Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt.
Sollte 'OrDefault' nicht bedeuten, dass 0 zurückgegeben wird, wenn keine Datensätze vorhanden sind?
Wie kann ich 0 - oder irgendeinen Nicht-Null-Wert zurückgeben, um einen Absturz zu verhindern.
Danke
Das Problem ist, dass Sie Dapper sagen, dass Sie eine Sequenz von int
erwarten sollen, aber Sie haben tatsächlich die Möglichkeit, einen null
haben. Sie müssen also entweder den Typ ändern
var x = connection.Query<int?>("SELECT max(val) FROM info").Single() ?? 0;
Oder Sie müssen die Abfrage ändern, um den null
zu behandeln.
var x = connection.Query<int>("SELECT COALESCE(max(val), 0) FROM info").Single();
Ich verwende hier Single
, weil diese Abfrage immer nur genau eine Zeile zurückgeben soll.
Sie würden FirstOrDefault
wenn Sie eine Sequenz erwarten und nur das erste Element möchten oder wenn keine Elemente den Standardwert des Elementtyps haben sollen.
var x = connection.Query<int>("SELECT ISNULL(max(val), 0) FROM info").Single();
Sie können ISNULL verwenden, wenn Sie den Standardwert auswählen möchten, wenn der Wert null ist.