我有一个使用点符号的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
Run Code Online (Sandbox Code Playgroud)
它最终会像:
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
Run Code Online (Sandbox Code Playgroud)
Linq中的.Join()看起来像:
localTableOne.Join(localTableTwo,
One => One.fieldOne,
Two => Two.fieldOne,
(One, Two) => new { One, Two })
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,一旦我进入第二个JOIN,前一个JOIN结果的结果的匿名变量没有属性"fieldOne"或"fieldTwo"或本地表的任何字段都加入.它有一个属性"One",它具有第一个表中的属性,以及属性"Two",具有表2中的属性.因此,如果我想将这些结果与另一个表连接,则内部的lambda函数表看起来像
firstJoinResult => firstJoinResult.One.fieldOne
Run Code Online (Sandbox Code Playgroud)
如果我只加入三张桌子,这不会有问题.我目前正在加入7桌.Linq查询以.Select()函数结束,因此lambda函数的字段最终看起来像:
fieldOne = seventhJoin.sixthJoin.fifthJoin.fourthJoin.thirdJoin.secondJoin.firstJoinResult.One.fieldOne
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让这个电话更小吗?在某种程度上访问我正在寻找的领域?另一种进行多重连接的方法?
谢谢
UPD
我忘了提到我正在寻找使用点符号Linq的解决方案.
使用查询语法,它看起来像这样
var query = from One in tableOne
from Two in tableTwo
from Three in tableThree
where One.fieldOne == Two.fieldOne
where One.fieldTwo == Three.fieldTwo
where One.fieldThree == something
select new {
};
Run Code Online (Sandbox Code Playgroud)