に* SELECT実行されている:.SKIP()(テイク)Entity Frameworkのナビゲーションプロパティには、私はこのように私の生成された部分クラスのメソッドを持っている私のSQL Serverの
var pChildren = this.Children
.Skip(skipRelated)
.Take(takeRelated)
.ToList();
私はSQL Serverのを見て、私は生成されたコードがSELECT *.* FROM Children
をしているのがわかりますこのコードは私のクラスから直接取られ、私はSkip/Takeの順序が私の.ToListより前であることを確認しました。
私は.ToListを削除すると、その行は(そしてSQLが私のDBに送信されません)高速ですが、私は結果の上にforeach
にしようとした瞬間は、私は私のDBに送信された同じSQLを取得:SELECT *.* FROM Children
を。
.Skipを使用して、私のエンティティのナビゲーションプロパティのを使用する際に、何か特別なことがありますか?私は生成された実際のSQLを取得しようとするでしょう
更新
は、私は現在、そのためのセットアップではありませんよ。 SSMSの「最近の高価なクエリ」リストに表示されるため、最初のものが見つかりました。
var pChildren = this.Children
//.Skip(skipRelated)
//.Take(takeRelated)
.ToList();
〜4,000,000行戻り、〜25秒かかります。これを実行する
。
var pChildren = this.Children
//.Skip(skipRelated)
.Take(takeRelated)
.ToList();
〜4,000,000行戻り、〜25秒かかります。これを実行する
。
私が言ったように、私はこれらのために生成されたSQLをつかんで、それを同様にポーズします。
で
このようなを照会することができますか? – cdhowie
私は 'SELECT TOP 10 FROM Children WHERE ParentID = @ idOfParentEntity'のようなものを望んでいました(EFが.Skipをどのように扱うのか忘れていますが、それは私が読んだものです。返されるデータを特定の "ページ"に限定する) – Nate
'.Skip()'の存在は 'TOP'の使用を排除します。あなたが 'skipRelated'と' takeRelated'を合計し、それを 'TOP'へのパラメータとして使うことを期待していない限り...最適化であるかもしれませんが、それはパフォーマンスに影響を与えません。 – cdhowie