我有一个使用点符号的 Linq 查询,它必须与几个不同的枚举进行连接。我发现进行多重连接的方法是一个接一个地进行:而不是等同于以下 SQL 语句:
SELECT
blah blah blah
FROM
tableOne as One, tableTwo as Two, tableThree as Three
WHERE
One.fieldOne == Two.fieldOne AND
One.fieldTwo == Three.fieldTwo AND
One.fieldThree == something
它最终是这样的:
SELECT
blah blah blah
FROM
(
SELECT
blah blah blah
FROM
tableOne as One, tableTwo as Two
WHERE
One.fieldOne == Two.fieldOne
One.fieldThree == something
) as firstJoin,
tableThree as Three
WHERE
firstJoin.fieldTwo == Three.fieldTwo
Linq 中的 .Join() 看起来像:
localTableOne.Join(localTableTwo,
One => One.fieldOne,
Two => Two.fieldOne,
(One, Two) => new { One, Two })
我遇到的问题是,一旦我进入第二个 JOIN,前一个 JOIN 结果的结果的匿名变量没有属性“fieldOne”或“fieldTwo”或本地表的任何字段加入。它有一个属性“One”,它具有第一个表中的属性,以及一个属性“Two”,其中包含表 2 中的属性。所以,如果我想将这些结果与另一个表连接起来,内部的 lambda 函数桌子看起来像
firstJoinResult => firstJoinResult.One.fieldOne
如果我只加入三个表,这不会是一个问题。我目前正在加入 7 张桌子。Linq 查询以 .Select() 函数结束,因此 lambda 函数的字段最终看起来像:
fieldOne = seventhJoin.sixthJoin.fifthJoin.fourthJoin.thirdJoin.secondJoin.firstJoinResult.One.fieldOne
有什么办法可以让这个电话变小吗?以某种方式直接访问我正在寻找的领域?另一种进行多重连接的方法?
谢谢
UPD
我忘了提到我正在寻找使用点符号 Linq 的解决方案。