2017-06-09 3 views
0

je créer cette LINQ pour obtenir toutes les lignes de jointure gauche tabRealisationtabPrevision utilisant let et Group.FirstOrDefaultVb Linq « La valeur ne peut pas être nulle » en utilisant 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 

Mais si p ne contient aucune ligne je reçois l'erreur:

La valeur ne peut pas être nulle. Je l'ai essayé:

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

mais je reçois le même message d'erreur. toute aide s'il vous plaît

+2

'FirstOrDefault' empêche juste qu'une exception soit levée dans le cas où il n'y a aucun élément à retourner. Vous devez toujours vérifier par la suite si la valeur renvoyée est 'Nothing' –

Répondre

0

Utilisez l'opérateur conditionnel nul lorsque p est null; exige 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