gpt4 book ai didi

c# - LINQ:没有使用点表示法的 long final 匿名变量的多个 JOINS

转载 作者:太空宇宙 更新时间:2023-11-03 20:22:32 26 4
gpt4 key购买 nike

我有一个使用点符号的 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”或本地的任何字段表加入。它有一个属性“一”,它具有第一个表中的属性,还有一个属性“二”,具有表 2 中的属性。因此,如果我想将这些结果与另一个表连接起来,内部的 lambda 函数表格看起来像

firstJoinResult => firstJoinResult.One.fieldOne

如果我只连接三个表,这就不是问题。我目前加入了 7 张 table 。 Linq 查询以 .Select() 函数结束,因此 lambda 函数的字段最终看起来像:

fieldOne = seventhJoin.sixthJoin.fifthJoin.fourthJoin.thirdJoin.secondJoin.firstJoinResult.One.fieldOne

有什么办法可以让这个调用更小吗?以某种方式直接访问我正在寻找的字段?进行多重连接的另一种方法?

谢谢

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 {
};

关于c# - LINQ:没有使用点表示法的 long final 匿名变量的多个 JOINS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com