私はLINQ2SQLを使用しています。私はLINQはLINQLINQ to SQLが複数の選択クエリを生成するのはなぜですか?
以下するvarたtableData = DataContextのための複数のSELECT文を生成していること(SQLプロファイラで)気づきました。 TableName .ToList();
SQLプロファイラは、DML文の下に示し倍
テーブル名 から?選択COLUMNNAMESこの理由は何
私はLINQ2SQLを使用しています。私はLINQはLINQLINQ to SQLが複数の選択クエリを生成するのはなぜですか?
以下するvarたtableData = DataContextのための複数のSELECT文を生成していること(SQLプロファイラで)気づきました。 TableName .ToList();
SQLプロファイラは、DML文の下に示し倍
テーブル名 から?選択COLUMNNAMESこの理由は何
が提示されているように、はselectステートメントを1つだけ実行します。質問を単純な例に移す際に、ここの問題が隠されているのだろうかと思います。実際にのコードでは、データをリストにプッシュしません。 .Where()
のような方法が唯一を構成クエリ - それは、リストにデータをロードしないので、次は2つのクエリです:メモリにバッファすることを強制します.ToList()
を追加
var tableData = dataContext.TableName.Where(row => row.Foo == bar);
foreach(var items in tableData) {...}
foreach(var items in tableData) {...}
単一のTSQLクエリ。その後の一覧の列挙はメモリ(LINQ-to-Objects)で行われます。もちろん
、あなたはかなり簡単に実行されているものLINQツーSQLプロファイリングすることができます
dataContext.Log = Console.Out; // or any other text-writer
私は彼が実際にやっていることだと思います。彼の問題は明らかに.ToList()メソッドがデータベースに2回呼び出しているということです。 – vtortola
@vtortolaと私がレプロを見るとき、私は –
SQL Serverプロファイラは、デフォルトで以下のイベントをサブスクライブします。
Audit Login
Audit Logout
Existing Connection
RPC:Completed
SQL:BatchCompleted
SQL:BatchStarting
あなたはすべてのバッチ文はちょうどのでSQL:BatchStarting
とSQL:BatchCompleted
イベントの2回繰り返し参照これらのデフォルトのイベントでプロファイラを起動した場合。それはチェックする価値があることはよくある誤解です。
とあなたの質問は? – Bazzz
@Miral:私はあなたの質問を実際の質問に編集するだけでなく、タグを編集する自由を取った。私が何かを誤解した場合は、それを見直して変更してください。 –
実際にクエリを2回実行してもよろしいですか?最初は、準備または構文チェック(SET PARSEONLY) – Blorgbeard