为什么 EntityFramework 不使用我的谓词?

E-A*_*E-A 1 linq entity-framework predicate

我有一个 PredicateBuilder,它是从http://www.albahari.com/nutshell/predicatebuilder.aspx得到的

这是我如何使用它:

var Expression = PredicateBuilder.True<UCM_UserAgent>();
Expression = Expression.And(item => item.AgentText == "TestUserAgent Value");

Func<UCM_UserAgent, bool> SearchCriteria = Expression.Compile();
var Data = Context.UCM_UserAgent
                                    .Where(SearchCriteria)
                                    .ToList();
Run Code Online (Sandbox Code Playgroud)

当我在我的数据库上检查 SQL Profiler 时:

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[AgentText] AS [AgentText], 
FROM [dbo].[UCM_UserAgent] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)

现在,我添加的条件在哪里?我无法解决这个问题。不幸的是,这个Entity Framework 和 Predicate Builder - Predicates are Ignored in SQL Query也没有帮助。

编辑:消除任何误解;我不想使用 x => x.AgentText = "SomeText"。因为我想构建一个动态的 LINQ 查询,所以我使用了 PredicateBuilder。

div*_*ega 5

如果您希望谓词由 LINQ to Entities 处理,您需要将Expression<Func<T,bool>>版本传递给 Queryable.Where() 方法,而不是Func<T,bool>像您目前所做的那样将版本传递给 Enumerable.Where() 方法,即不编译在调用 Where 方法之前将表达式转换为 IL,否则您将必须获得 LINQ to Objects 版本。