LINQ to Entitesを使用して、従来のSQL ServerストアドプロシージャをEF4に変換するプロセスを進めています。あるシナリオで iが機能1 F1、機能2 F2及び関数3 F3は、テーブル変数を返す3つのSQLServer Table_Valued機能が どこLINQ TO ENTITIES複数のコレクションへの結合
Select * from Function1 F1 ,Function2 F2, Function3 F3
where F1.ID = F2.ID and
F2.ID = F3.ID (i am showing it simple)
ように3つの異なるTable_Valued機能 から選択ストアドプロシージャを持っています。
現在、私が今行っているのは、3つの異なるC#メソッド(これはSQLサーバー関数のものと同じ機能を模倣しています)を返すものです。コレクションを作成し、これら3つのコレクションをまとめて最終的な結果セットを取得します。
上記の解決策を使用すると、コードを一緒に呼び出すのではなく、データベースへの呼び出しを3回呼び出していると思いますので、代替ソリューションがありますか?
複数の呼び出しではなく、1つの大きなSQLを呼び出すコードを使用したいと思います。
ありがとうございました!
まあ私は、コレクションの代わりにIQueryableを返した場合、それらはすべて1つのSQLとして実行されると思いますか?メソッド1とメソッド2の両方が返ってくると思いますIQueryableと私はステートメントを書く場合、var1 = method2のmethod1のmethod1のm1からvar q = m1.Id == m2.ID m1.Nameを選択します。 int count = q.Count();最後の文はデータベース内の1つのSQLとして実行されるべきではありませんか? – user636525
これはあなたの最初の記述とはかなり大きな違いです。 'IQueryable'はコレクションではありません。そのような場合は、あなたの方法がどのように書かれているかによって異なります。それらはデータベース上で実際に実行することができ、3つの結合はすべて単一のデータベース往復で評価できます。 SQLプロファイラを使用するか、最終的な 'IQueryable 'を 'ObjectQuery'に変換し、 'ToTraceString'をチェックすることで、正確なクエリがどのようなものであるかを検証することができます –
ありがとう!すべてのメソッドの戻り値をIQueryableに変更し、何が起こるかを確認します。以前はListを返していましたが、3つのコレクションに参加していました。 –
user636525