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