私のデータアクセスクラスの1つでEntity Framework 4.3を使用すると、このような汎用関数があります
public List<Company> Query(Func<Company, bool> expression)
{
return MyDbContext.Instance().Company.Where(expression).ToList();
}
ビジネス層クラスから MyDAL.Query(a => a.Name.Contains(textToSearch)) として使用します。
ofEntity Framework は正しい結果を返すのに、なぜ "Where name like '%' + textToSearch + '%'" のような Where 句を含む SQL クエリ文を生成するのではなく、where のない SQL クエリ文を生成するのかわかりません。句は、すべてのテーブル行を照会します。明らかに、これは非常に非効率的です。
他の方法で、私のデータ アクセス クラスでは、次のようなメソッドを記述します。
public List<Company> GetLikeName(string textToSearch)
{
return MyDbContext.Instance().Company.Where(a => a.Contains(textToSearch)).ToList();
}
where like句を使用してSqlを正しく生成します。
一般的なクエリを使用してデータベースから結果を取得し、ビジネス クラスからクエリする式を指定すると、where 句のない SQL 文が生成されるのはなぜですか?
ありがとう