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

时间:2013-11-27 10:13:56

标签: 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();

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

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[AgentText] AS [AgentText], 
FROM [dbo].[UCM_UserAgent] AS [Extent1]

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

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

1 个答案:

答案 0 :(得分:3)

如果希望LINQ to Entities对谓词进行哈希处理,则需要将Expression<Func<T,bool>>版本传递给Queryable.Where()方法,而不是将Func<T,bool>版本传递给Enumerable.Where(你正在做的方法,即在调用Where方法之前不要将表达式编译成IL,否则你必须得到LINQ to Objects版本。