Nullwertbehandlung in LINQ-Abfrage: Typkonvertierungsfehler beheben
Wenn eine LINQ-Abfrage möglicherweise einen Nullwert zurückgibt, wird möglicherweise der folgende Fehler ausgegeben: „Der Werttyp ‚Int32‘ kann nicht in Null konvertiert werden. Generische Parameter des Ergebnistyps oder der Abfrage müssen einen nullfähigen Typ verwenden, um dieses Problem zu beheben.“ Um einen Fehler zu beheben und Nullwerte zuzulassen, sollten Sie den folgenden Ansatz in Betracht ziehen:
Methode 1: Verwenden Sie DefaultIfEmpty und Sum und geben Sie den Standardwert
an<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select ch.Amount).DefaultIfEmpty(0).Sum();</code>
Diese Methode verwendet DefaultIfEmpty
, um einen Standardwert (in diesem Fall 0) einzufügen, wenn in der Tabelle CreditHistory
kein passender Datensatz vorhanden ist.
Methode 2: Konvertieren Sie in einen nullbaren Typ und verwenden Sie den ??-Operator
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select (int?)ch.Amount).Sum() ?? 0;</code>
Bei dieser Methode wird die Abfrage geändert, um das Amount
-Attribut in einen nullbaren Typ (int?
) umzuwandeln. Dadurch wird der Compiler benachrichtigt, dass der Wert möglicherweise null ist. Verwenden Sie dann den Operator ??
, um den Fall eines Nullwerts zu behandeln, und weisen Sie einen Standardwert (in diesem Fall 0) zu, wenn der Wert null ist.
Methode 3: Verwenden Sie die Coalesce-Funktion
<code class="language-csharp">var creditsSum = (from u in context.User join ch in context.CreditHistory on u.ID equals ch.UserID where u.ID == userID select COALESCE(ch.Amount, 0)).Sum();</code>
Diese Methode verwendet die Funktion COALESCE
, um Nullwerte direkt in der SQL-Abfrage durch einen angegebenen Standardwert (in diesem Fall 0) zu ersetzen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Nullwerten in LINQ-Abfragen um, um Umwandlungsfehler zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!