これについて専門家のアドバイスが欲しいです。以前にコンパイル済みクエリを使用したことがありますが、この特定のケースでは、それが適切かどうかわかりません。
これは、クエリが変化し、検索対象に依存する検索フォームです。
static Func<DBContext, int, IQueryable<Foo>> Search = CompiledQuery.Compile(
(DBContext db, int ID) =>
db.Person
.Where(w => w.LocationID = ID)
.Select(s =>
new Foo
{
Name = s.PersonName,
Age = s.Age,
Location = s.LocationName,
Kin = s.Kin
}));
誰かが検索ボックスに入力した場合、クエリに別のWhere
ステートメントを追加してクエリを拡張したいと思います。
var query = Search(context, 123);
query = query.Where(w => w.Name.Contains(searchString));
だから私の質問は、すべての結果を返し、結果の一致LocationID == 123
をチェックしていますか? searchString
それとも、実際にコンパイルされたクエリを拡張していますか?
それが前者の場合(私はそうであると思われます)、を破棄しCompiledQuery
て、クエリを拡張するメソッドを作成し、それをリストとして返す必要がありますか?
また、使用のベスト プラクティスCompiledQuery
とはどのような場合に使用すべきかについてのガイドラインはありますか?
注:Linq to SQLを使用してASP.NET Webサイトで上記を使用しています。それが違いを生むかどうかはわかりません。
ありがとう