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