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 })

私が抱えている問題は、2 番目の JOIN に入ると、前の JOIN 結果の結果の匿名変数に、プロパティ「fieldOne」または「fieldTwo」、または結合されたローカル テーブルのフィールドがないことです。最初のテーブルのプロパティを持つプロパティ「One」と、テーブル2のプロパティを持つプロパティ「Two」があります。したがって、これらの結果を別のテーブルと結合したい場合は、内部のラムダ関数テーブルは次のようになります

firstJoinResult => firstJoinResult.One.fieldOne

3 つのテーブルを結合するだけであれば問題ありません。私は現在7つのテーブルに参加しています。Linq クエリは .Select() 関数で終了するため、ラムダ関数のフィールドは次のようになります。

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 に答える