Vb Linq"值不能为空"使用Group.FirstOrDefault

时间:2017-06-09 10:49:49

标签: vb.net linq linq-to-sql

我已创建此linq以使用tabRealisationtabPrevision

获取let左连接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

但如果p不包含任何行,则会收到错误:

  

该值不能为null。   我试过这个:

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

但是我得到了相同的错误消息。 任何帮助,请

1 个答案:

答案 0 :(得分:0)

p为空时使用空条件运算符;需要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