EF と Predicate Builder に問題があります。私はすべての手順を実行しており、すべてが正しく行われていると確信していますが、SQL プロファイラーを実行してデータベースへのクエリを調べると、述語が無視され、テーブル内のすべてのレコードが取得されます。 table は現在最大約 600,000 行であるため、処理が少し遅くなります。データベースがクエリを実行した後、私の述語が適用されます。
誰かが私に欠けているものを教えてもらえますか?
var predicate = PredicateBuilder.True<ListRecord>();
var classFilter = PredicateBuilder.False<ListRecord>();
classFilter = classFilter.Or(x => x.Community == "Air Force");
classFilter = classFilter.Or(x => x.Community == "Navy");
predicate = predicate.And(classFilter);
// Add several more predicates just like classFlter
var query = db.ListRecords.AsExpandable().Where(predicate.Compile());
var list = query.ToList();
私がコピーした例は、http://www.albahari.com/nutshell/predicatebuilder.aspxの Nesting Predicates です。
これは、生成されている SQL です。
SELECT
[Extent1].[ListRecordId] AS [ListRecordId],
[Extent1].[Community] AS [Community]
-- And every other column from this table
FROM [dbo].[ListRecord] AS [Extent1]