Heim > Backend-Entwicklung > C++ > Wie behebe ich „Cast to Int32 Failed'-Fehler in LINQ-Abfragen mit Nullwerten?

Wie behebe ich „Cast to Int32 Failed'-Fehler in LINQ-Abfragen mit Nullwerten?

Mary-Kate Olsen
Freigeben: 2025-01-10 20:41:45
Original
600 Leute haben es durchsucht

How to Resolve

Umgang mit Nullwerten in LINQ-Abfragen: Beheben des Fehlers „Konvertierung in Int32 nicht möglich“

Wenn in einer LINQ-Abfrage der Fehler „Kann nicht in den Werttyp ‚Int32‘ konvertiert werden, da der materialisierte Wert null ist“ auftritt, deutet dies auf eine Nichtübereinstimmung zwischen dem erwarteten Nicht-Null-Typ und dem möglichen Vorhandensein von Nullwerten in hin die Abfrageergebnisse.

Ursprüngliche Abfrage:

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

Frage:

Diese Abfrage ruft die Summe von ch.Amount für Benutzer mit einer bestimmten Benutzer-ID ab. Wenn für diesen Benutzer jedoch kein Datensatz in der CreditHistory-Tabelle vorhanden ist, versucht die Abfrage, Nullwerte in den Datenbankergebnissen in Int32 umzuwandeln, was zu einem Fehler führt.

Lösung:

Um Nullwerte zu berücksichtigen, umfassen Lösungen die Einführung nullfähiger Typen und die entsprechende Behandlung von Nullfällen.

Nullfähige Typen verwenden:

Konvertieren Sie zunächst den Ausdruck in der Select-Klausel in einen Nullable-Typ, z. B. int?. Dadurch wird dem Compiler mitgeteilt, dass die Eigenschaft möglicherweise einen Nullwert enthält:

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

Verwenden Sie den Null-Koaleszenzoperator (??):

Als nächstes verwenden Sie den ??-Operator, um den Nullfall zu behandeln. Es prüft, ob der Ausdruck leer ist und gibt den Standardwert (in diesem Fall 0) zurück:

<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>
Nach dem Login kopieren

Durch die Einbeziehung dieser Änderungen können Abfragen Nullwerte ordnungsgemäß verarbeiten und entsprechende Ergebnisse zurückgeben, wodurch Konvertierungsfehler vermieden werden.

Das obige ist der detaillierte Inhalt vonWie behebe ich „Cast to Int32 Failed'-Fehler in LINQ-Abfragen mit Nullwerten?. 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