Heim > Backend-Entwicklung > C++ > Wie vermeide ich „Cast Failed'-Fehler beim Summieren von Nullable-Ganzzahlen in LINQ?

Wie vermeide ich „Cast Failed'-Fehler beim Summieren von Nullable-Ganzzahlen in LINQ?

Linda Hamilton
Freigeben: 2025-01-10 20:56:45
Original
701 Leute haben es durchsucht

How to Avoid

Umgang mit Nullwerten in LINQ-Abfragen: Beheben des Fehlers „Konvertierung fehlgeschlagen“

Beim Ausführen einer LINQ-Abfrage stoßen Entwickler möglicherweise auf den Fehler: „Kann nicht in den Werttyp ‚Int32‘ konvertiert werden, da der materialisierte Wert null ist.“ Dieses Problem tritt auf, wenn versucht wird, einen nullbaren Wert in einen nicht nullbaren Werttyp „hour“ zu konvertieren .

Die folgende LINQ-Abfrage veranschaulicht diese Situation:

<code>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).Sum();</code>
Nach dem Login kopieren

Diese Abfrage berechnet die Summe der Spalte „Betrag“ für eine bestimmte Benutzer-ID in der CreditHistory-Tabelle. Wenn jedoch in der CreditHistory-Tabelle kein Datensatz für den angegebenen Benutzer vorhanden ist, gibt der ch.Amount-Ausdruck null zurück. Dieser Nullwert kann nicht in den nicht nullbaren Werttyp Int32 konvertiert werden, was zu einem Fehler führt.

Lösung: Umgang mit Nullwerten

Um nullbare Werte in LINQ-Abfragen zu verarbeiten, gibt es zwei mögliche Ansätze:

  1. DefaultIfEmpty verwenden: Diese Methode fügt den Abfrageergebnissen einen Standardwert hinzu, wenn keine Zeilen zurückgegeben werden. Im gegebenen Szenario kann die Abfrage wie folgt geändert werden:
<code>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>
Nach dem Login kopieren
  1. Verwendung des Bedingungsoperators (??): Mit dem Bedingungsoperator (??) können Sie einen Standardwert angeben, der im Falle eines Nullergebnisses verwendet werden soll. Die Abfrage kann wie folgt umgeschrieben werden:
<code>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>
Nach dem Login kopieren

In dieser Version konvertiert der Ausdruck (int?)ch.Amount den Wert explizit in int?, was darauf hinweist, dass er null sein kann. Der nachfolgende ??-Operator ersetzt alle Nullwerte durch den Standardwert 0.

Durch die Implementierung einer dieser beiden Methoden kann die Abfrage erfolgreich Nullwerte verarbeiten und die gewünschten Ergebnisse zurückgeben.

Das obige ist der detaillierte Inhalt vonWie vermeide ich „Cast Failed'-Fehler beim Summieren von Nullable-Ganzzahlen in LINQ?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage