2017-02-14 4 views
0

Ich Gruppierung von Daten in Datentabelle und eine Spalte Linq Zusammenfassung verwenden, aber während der Laufzeit ich bin immer Fehler, der besagt, dassErste Fehler Kann werfen DBNull.Value nicht auf den Typ ‚System.Int32

nicht DBNull.Value werfen kann um 'System.Int32' einzugeben. Bitte verwenden Sie einen Nullable Type“Unten ist mein Code

Dim resultStyle = invData.Tables(0).AsEnumerable() _ 
     .GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer)("InstitutionalInvestorStyleID"), Key .StyleName = Not IsNothing(v.Field(Of String)("InstitutionalInvestorStyleName"))}) _ 
     .Select(Function(v) New With {Key .InvestorStyleID = v.Key.InvestorStyleID, Key .StyleName = v.Key.StyleName, Key .Sum = v.Sum(Function(r) Double.Parse(r.Item("k001ICGeo").ToString()))}) 

schlagen mir bitte, wie null value.I zu vermeiden, nehmen Fehler bin immer auf der zweiten Linie

.GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer)("InstitutionalInvestorStyleID"), Key .StyleName = Not IsNothing(v.Field(Of String)("InstitutionalInvestorStyleName"))}).

Ich will nicht um den Nullwert zu übernehmen

+0

Ich glaube, das Problem der InstitutionalInvestorStyleID ist. Überprüfen Sie, ob dies in der Datenbank zulässig ist. Versuchen Sie 'v.Field (Of Integer?) (" InstitutionalInvestorStyleID ")' – shadow

Antwort

0

DataTables speichert keine Nullwerte, stattdessen speichern sie DBNull.

Ihre IsNothing ist daher nicht hilfreich.

Also, Sie müssen mit DBNull.Value (ein Singleton von DBNull) vergleichen.

0

versuchen, etwas wie folgt aus:

Dim resultStyle = invData.Tables(0).AsEnumerable() _ 
         .GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer?)("InstitutionalInvestorStyleID").GetValueOrDefault, 
                 Key .StyleName = If(String.IsNullOrEmpty(v.Field(Of String)("InstitutionalInvestorStyleName")),"", v.Field(Of String)("InstitutionalInvestorStyleName"))}) _ 
         .Select(Function(v) New With {Key .InvestorStyleID = v.Key.InvestorStyleID, Key .StyleName = v.Key.StyleName, Key .Sum = v.Sum(Function(r) Convert.ToDouble(r.Item("k001ICGeo"))))}) 
+0

Danke für Ihre Hilfe. Ich bekomme jetzt keinen Fehler, aber ich möchte diese bestimmte Zeile nicht verwenden, wenn der Stilname null oder "" ist. Wie kann ich diese Zeile vermeiden? –

0

Die Fehlermeldung ist, weil Sie Nullwerte in der Spalte, die Sie zu werfen versuchen, während die Gruppierung, so einfach es Typ Nullable ändern. Auch erhalten nur die Datensätze, die Nullwerte nicht unter Verwendung eines Filters Where Klausel wie folgt beantragen: -

Dim resultStyle = invData.Tables(0).AsEnumerable() _ 
    .GroupBy(Function(v) New With {Key .InvestorStyleID = v.Field(Of Integer?)("InstitutionalInvestorStyleID"), Key .StyleName = Not IsNothing(v.Field(Of String)("InstitutionalInvestorStyleName"))}) _ 
    .Where(Function(x) x.Key.InvestorStyleID IsNot Nothing) _ 
    .Select(Function(v) New With {Key .InvestorStyleID = v.Key.InvestorStyleID, Key .StyleName = v.Key.StyleName, Key .Sum = v.Sum(Function(r) Double.Parse(r.Item("k001ICGeo").ToString()))}) 

Ich habe auch eine Probe Geige zu zeigen, hinzugefügt, wie es mit einigen Beispieldaten funktioniert.

Fiddle.

Verwandte Themen