2017-06-09 6 views
0

ich diese Linq erstellen müssen alle Zeilen von tabRealisation zu bekommen links tabPrevisionlet mit beitreten und Group.FirstOrDefaultVb Linq „Der Wert darf nicht Null sein“ mit Group.FirstOrDefault

Dim query1 = 
(From r In tabRealisation.AsEnumerable 
Group Join p In tabPrevision.AsEnumerable 
On r.Field(Of Integer)("code_part") Equals p.Field(Of Integer)("code_part") 
Into Group 
Let p = Group.FirstOrDefault 
Where r.Field(Of Integer)("code_part") = 276 
Select an = r.Field(Of Integer)("Annee"), 
     code_part = r.Field(Of Integer)("code_part"), 
     Designation_part = r.Field(Of String)("Designation_part"), 
     NbrR = r.Field(Of Integer?)("UniteVendu"), 
     EncP = p.Field(Of Double?)("CAEncaissVentePrev"), 
     RecP = p.Field(Of Double?)("MontantRecouvrementPrev") 
     ).ToList 

Aber wenn p enthält nicht jede Zeile ich bekomme den Fehler:

Der Wert kann nicht null sein. Ich habe dies versucht:

RecP = If(p.Field(Of Double?)("MontantRecouvrementPrev").Equals(DBNull.Value) 
           , 0, p.Field(Of Double?)("MontantRecouvrementPrev")), 

aber ich bekomme die gleiche Fehlermeldung. keine Hilfe, bitte

+2

'FirstOrDefault' verhindert nur, dass eine Ausnahme ausgelöst wird, wenn keine Elemente zurückgegeben werden. Sie müssen nachher noch überprüfen, ob der zurückgegebene Wert 'Nichts' ist –

Antwort

0

Verwenden Sie den null bedingten Operator für, wenn Null ist; erfordert VB 14:

Select an = r.Field(Of Integer)("Annee"), 
    code_part = r.Field(Of Integer)("code_part"), 
    Designation_part = r.Field(Of String)("Designation_part"), 
    NbrR = r.Field(Of Integer?)("UniteVendu"), 
    EncP = p?.Field(Of Double?)("CAEncaissVentePrev"), 
    RecP = p?.Field(Of Double?)("MontantRecouvrementPrev") 
    ).ToList 
Verwandte Themen