0

我在尝试加入 3 个表的 LINQ 查询时遇到问题,其中一个表充当过滤器。当我只使用其中一个连接运行查询时,我得到了预期的记录数,但是当我添加第二个连接时,查询会过滤掉我不想要的其他记录。2个查询粘贴在下面......有人能看到我在哪里出错了吗?谢谢!

使用单个连接(预期结果):

                 Dim Report = From Filter In FilterTable _
                              Join EDTK In eDTKBase _
                                On Filter.PLI_Code Equals EDTK.eDTK_PLI _
                              Select Filter.PLI_Code, _
                                     EDTK.eDTK_Instance, _
                                     EDTK.eDTK_PLI_Name, _
                                     EDTK.eDTK_PDP_Code, _
                                     EDTK.PDD_PDP_Description

有 2 个连接:

                  Dim Report= From Filter In FilterTable_
                              Join EDTK In eDTKBase _
                                On Filter.PLI_Code Equals EDTK.eDTK_PLI _
                              Join PLI In ProdBase _
                                On Filter.PLI_Code Equals PLI.Siebel_PLI _
                              Select Filter.PLI_Code, _
                                     EDTK.eDTK_Instance, _
                                     EDTK.eDTK_PLI_Name, _
                                     PLI.Siebel_PLI, _
                                     PLI.Siebel_PLI_Name, _
                                     EDTK.eDTK_PDP_Code, _
                                     PLI.Siebel_PDP_Code, _
                                     EDTK.PDD_PDP_Description

好的,所以我使用左连接将查询更改为一个,但我仍然会过滤掉记录;我的联接的编写方式可能有问题吗?

 Dim EDTKMultPDPtoPLIRpt = From Filter In EDTKMultPDPtoPLIFilter _
                              Group Join EDTK In eDTKBase _
                                On Filter.PLI_Code Equals EDTK.eDTK_PLI _
                              Into g = Group _
                              From EDTK In g _
                              Group Join PLI In ProdBase _
                                On EDTK.eDTK_PLI Equals PLI.Siebel_PLI _
                              Into h = Group _
                              From PLI In h _
                              Select Filter.PLI_Code, _
                                     EDTK.eDTK_Instance, _
                                     EDTK.eDTK_PLI_Name, _
                                     PLI.Siebel_PLI, _
                                     PLI.Siebel_PLI_Name, _
                                     EDTK.eDTK_PDP_Code, _
                                     PLI.Siebel_PDP_Code, _
                                     EDTK.PDD_PDP_Description
4

1 回答 1

1

这听起来很像您需要 LEFT JOIN。

如果 FilterTable.PLI_Code 中的某些值未出现在 ProdBase.Siebel_PLI 中,那么您将不会在 Inner Join 中恢复这些组合行。

您可以通过加入表、计算结果然后将“JOIN”更改为“LEFT JOIN”来轻松地在 SQL 中测试它。如果您使用左连接获得更多结果(FilterTable 中的每一行都应该有一个),那么这就是您的问题。

如果您确定是这种情况,您可以修改您的 linq 查询来执行此操作,或者您可能需要向 ProdBase 添加更多记录。

于 2013-05-17T19:32:07.957 回答