2012-02-20 5 views
1

私はEFに新たなんだので、私は、私はちょうど私が唯一のフィルタリングされたデータをロードする代わりにするEFを制限することができます最善の方法であるかを知りたい4.2を使用している今、少し穏やかなdbからすべてのデータを取り出し、その上にフィルタを適用します。EF DbContext.Set <T>フィルタ記録のみ

DbContext.Set()またはDbContext.Set()が表示されます。AsQueryable();つまり、「Where」機能についてはわかりませんが、同じ原則で動作しているようです(つまり、指定されたテーブルのデータをすべて読み込んでからフィルタを適用してもパフォーマンスが大幅に低下しません)。または私はここに何かを逃していますか?私はEFがテーブルからすべてのデータをフェッチするのではなく、フィルタリングしたデータのみをフェッチすることを望んでいます。それについてどうやって行くの?クエリに().Whereを使用している場合、それはあなたのアプリケーションではないDBサイト上で実行する必要がありますので

おかげ

+0

LINQクエリをSQLに変換されているフィルタ。 .ToList()/ .ToArray()のような処理を行い、その上に.Where()を適用すると、フィルタリングはクライアントサイトで行われます.ToList()は、フィルタ。 – Pawel

+0

@Pawel IQueryable query = _context.Set (); (filter!= null) }; //すべてのデータがすでに読み込まれているところです。だから私は_context.Set ().Where(フィルタ);そうすれば十分でしょうか? – afr0

+0

それをクリアするための@Pawelありがとう私はちょうどあなたが言ったようにwhere句を追加するSQLプロファイラを確認します。答えに印を付けることができませんでした。 歓声 – afr0

答えて

1

LINQクエリは、SQLに変換されます。 .ToList()/ .ToArray()のような処理を行い、その上に.Where()を適用すると、フィルタリングはクライアントサイトで行われます.ToList()は、クエリに().Whereを使用している場合、それはあなたのアプリケーションではないDBサイト上で実行する必要がありますので

関連する問題