1

我有一个使用点符号的 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 的解决方案。

4

1 回答 1

5

使用查询语法它看起来像这样

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 {
            };
于 2012-09-27T14:13:01.970 回答