0

3 つの結合を含む LINQ クエリと、null 参照エラーをスローするグループ化操作があります。以下のクエリ (長文で申し訳ありません) で、「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}
4

1 に答える 1

1

問題は、それResult3が null であり、そのプロパティにアクセスしようとしていることです。ifそれが、あなたが実際に問題を解決していない理由です。試行されたアクセスが基本的に発生するため、 is null のResult3.SomeField場合は null かどうかを確認できません。割り当てに使用する前に、 is null かどうかを確認する必要があります。そうである場合は、デフォルト値を使用する必要があります。私はそのナンセンスを書いていないのでVBにはなりませんが、一般的な考えを述べます:PResult3NullRefereceExceptionResult3

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

このチェックをクエリにどのように組み込むかは、自分で決める必要があります。Result3全体が私にとっては少し大変で、 nullの場合に何を割り当てたいのかわかりません。

于 2013-05-24T16:30:09.173 に答える