【问题标题】:LINQ query with multiple joins throwing null reference error具有多个连接的 LINQ 查询引发空引用错误
【发布时间】:2013-05-25 00:30:09
【问题描述】:

我有一个带有 3 个连接的 LINQ 查询和一个引发空引用错误的分组操作。在下面的查询(我很抱歉长度)中,如果您跳到“eDTK_PDP_Description”字段,那就是导致问题的那个。我意识到我有最后一个连接的 DefaultIfEmpty 规范,但我想如果我为该连接中的字段分配一个值,如果它是 null 应该可以解决问题。我在这里做错了什么?谢谢!

Dim UpdateSiebelPDP1 = From j In ( _
                           From PDP In SiebelMultPDPDescNoNull _
                           Group Join Siebel In ProdBase _
                                On PDP.Siebel_PDP_Code Equals Siebel.Siebel_PDP_Code _
                           Into g = Group _
                           From Result In g _
                           Group Join EDTK In eDTKBase _
                                On PDP.Siebel_PDP_Code Equals EDTK.eDTK_PDP_Code _
                           Into h = Group _
                           From Result2 In h _
                           Group Join EDTK2 In EDTKPDPOneDescDet _
                                On PDP.Siebel_PDP_Code Equals EDTK2.PDP_Description _
                           Into i = Group _
                           From Result3 In i.DefaultIfEmpty _
                           Select Result.Siebel_PLI, _
                                  Result.Siebel_PDP_Code, _
                                  Update_DAD_Flag = If(Result.Siebel_DAD_Flag Is Nothing, "Yes", "No"), _
                                  System = "Siebel", _
                                  PDD_PDP_Description = If(Result2.PDD_PDP_Description Is Nothing, _
                                                           "", Result2.PDD_PDP_Description), _
                                  Siebel_PDP_Description = "Multiple", _
                                  eDTK_PDP_Description = If(Result3.PDP_Description Is Nothing, _
                                                            "Multiple", Result3.PDP_Description)) _
                            Group j By j.Siebel_PLI, _
                                       j.Siebel_PDP_Code, _
                                       j.Update_DAD_Flag, _
                                       j.System, _
                                       j.PDD_PDP_Description, _
                                       j.Siebel_PDP_Description, _
                                       j.eDTK_PDP_Description _
                            Into k = Group _
                            Select New With { _
                                    Siebel_PLI, _
                                    Siebel_PDP_Code, _
                                    Update_DAD_Flag, _
                                    System, _
                                    PDD_PDP_Description, _
                                    Siebel_PDP_Description, _
                                    eDTK_PDP_Description}

【问题讨论】:

  • 跑题了,但是... Barf VB 甚至让性感的 LINQ 看起来很糟糕。
  • 显然你的一个对象是空的。我会将您的查询视为 SQL 语句并开始删除部分,直到您确定导致问题的联接,然后从那里挖掘。

标签: vb.net linq


【解决方案1】:

问题是Result3 为空,而您正试图访问其上的属性。这就是为什么您的 if 实际上并没有解决问题的原因。如果Result3 为空,则无法检查Result3.SomeField 是否为空,因为尝试访问会导致NullRefereceException,所以基本上,在尝试将其用于分配之前,您需要检查Result3 是否为空。如果是,那么您应该使用一些默认值。我会给出一个大致的想法,虽然它不会是 VB,因为我不会写那些废话:P

   if (Result3 != null)
        eDTK_PDP_Description = Result3.SomeField;
   else
        eDTK_PDP_Description = defaultValue;

您必须自己决定如何将此检查放入查询中。整个事情对我来说有点多,如果Result3 为空,我不知道你想在那里分配什么。

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多