【发布时间】:2016-04-07 16:18:16
【问题描述】:
我在 ACCESS 中有一个查询,我必须在 C# LINQ 中翻译这个查询。
SELECT DETAIL.*,
"" AS DBC_ART,
A_ENS.ENS_CODE,
A_LEA.LEA_ART,
A_ART_1.ART_CHA,
A_ART_1.ART_ANA,
A_ANA_REPART.ANA_CLA2
FROM (
(A_LEA RIGHT JOIN
((DETAIL LEFT JOIN A_ART ON DETAIL.DFA_ART = A_ART.ART_CODE)
LEFT JOIN A_ENS ON DETAIL.DFA_ART = A_ENS.ENS_CODE) ON A_LEA.LEA_ENS = A_ENS.ENS_CODE)
LEFT JOIN A_ART AS A_ART_1 ON A_LEA.LEA_ART = A_ART_1.ART_CODE)
LEFT JOIN A_ANA_REPART ON A_ART_1.ART_ANA = A_ANA_REPART.ANA_CODE
WHERE (((A_ENS.ENS_CODE) Is Not Null) AND ((A_ART.ART_CODE) Is Null))
ORDER BY DETAIL.BCI, DETAIL.FACTURE;
我并不完全需要 detail 字段,因为它是查询中的详细信息。*(我会自己找到必要的)
这是我不知道如何翻译它们的多个 JOIN。 我有每 5 个表的对象列表
I.E.
详细信息 -> LstDetail
A_ART -> LstA_ART
A_ENS -> LstA_ENS
A_LEA -> LstA_LEA
A_ART_1 -> LstA_ART(A_ART1 是与 A_ART 不同的另一个连接的别名)
A_ANAREPART -> LstA_ANAREPART
所以我开始写类似的东西:
MyList = (from itemDetail in LstDetail
join itemART in LstART
on itemDetail.DFA_ART equals itemART.ART_CODE
join itemANA_REPART in LstANA_REPART
on itemART.ART_ANA equals itemANA_REPART.ANA_CODE
select (...)).ToList();
但我不知道如何处理查询中的正确联接。我应该进行多个 linq 查询吗?什么样的?
提前感谢您的回答
【问题讨论】:
-
你看过其他例子吗? stackoverflow.com/questions/9914623/…
-
右连接只是相反方向的左连接,你不能只是重新排序查询,所以它都是左连接。此外,如果您要进行左连接,则需要使用
DefaultIfEmpty()语法,否则 linq 会将其视为内连接 -
@Bob Vale 您将右连接转换为左连接的方法是正确的,但我需要分别进行每个连接,因为我总是遇到此错误:“对象引用未设置为对象的实例”(我认为这是由于加入了 NULL 值的字段)。谢谢。