いくつかの異なる列挙型と結合する必要があるドット表記を使用した 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を使用して解決策を探していたことを忘れていました。