0

私は次のようなクエリを書いています:

var TheQuery = (from t in MyDC.Table1
                where ....
                select new SomeContainerModel()
                {
                    Collection1 = (from t2 in MyDC.Table2
                                   ....
                                   select new SomeModel()
                                   {
                                       SomeID = t2.SomeID
                                   }

                     Collection2 = (from x in Collection1
                                    from t3 in MyDC.Table3
                                    where x.SomeID == t3.SomeOtherID

私がやりたいのは、の結果をCollection1の入力として使用することですCollection2

それは可能ですか?

4

2 に答える 2

2

キーワードを使用letして、サブクエリ結果の新しい範囲変数を導入できます。

var theQuery = (from t in MyDC.Table1
                let subQuery = (from t2 in MyDC.Table2
                                ...
                                select new SomeModel() { SomeID = t2.SomeID })
                where ....                
                select new SomeContainerModel()
                {
                    Collection1 = subQuery,
                    Collection2 = (from x in subQuery
                                    from t3 in MyDC.Table3
                                    where x.SomeID == t3.SomeOtherID)
                };
于 2012-10-15T22:18:13.107 に答える
0

問題は、Collection1がCollection2と互換性がないことです。Collection1をモデルに変換したため、SQLに変換できなくなりました。

クエリをIQuerableとして扱うことをお勧めします。物理的に実行してデータを取得する必要がある最後までのみ。

各クエリをTransact-SQLスクリプトとして想像してください。MyDC.Table3と結合した場合でも、実際には次のようなサブクエリを追加するだけです。

SELECT * 
FROM Table3 a,
FROM (SELECT * FROM Table2 WHERE....) as SubQuery 
WHERE a.SomeID == SubQuery.SomeOtherID

したがって、SomeModel()の代わりに匿名型を使用してみてください。

于 2012-10-15T22:38:08.283 に答える