我遇到了 EF 和 Predicate Builder 的问题。我已经阅读了所有的说明,我很确定我做的一切都是正确的,但是当我运行 SQL Profiler 并检查进入数据库的查询时,它忽略了我的谓词并获取表中的每条记录,而这表目前多达大约 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上的嵌套谓词
这是正在生成的 SQL:
SELECT
[Extent1].[ListRecordId] AS [ListRecordId],
[Extent1].[Community] AS [Community]
-- And every other column from this table
FROM [dbo].[ListRecord] AS [Extent1]