Linq 为什么EntityFramework不使用我的谓词?
我有一个PredicateBuilder,我从那里得到它 下面是我如何使用它:Linq 为什么EntityFramework不使用我的谓词?,linq,entity-framework,predicate,Linq,Entity Framework,Predicate,我有一个PredicateBuilder,我从那里得到它 下面是我如何使用它: var Expression = PredicateBuilder.True<UCM_UserAgent>(); Expression = Expression.And(item => item.AgentText == "TestUserAgent Value"); Func<UCM_UserAgent, bool> SearchCriteria = Expression.Comp
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();
现在,我添加的条件在哪里?我无法解决这个问题。不幸的是,这也无济于事
编辑:
消除任何误解;我不想使用as x=>x.AgentText=“SomeText”。因为我想构建一个动态LINQ查询,所以我使用PredicateBuilder。如果希望LINQ将谓词隐藏到实体中,则需要将
表达式
版本传递给Queryable.Where()方法,而不是像目前这样将Func
版本传递给Enumerable.Where()方法,也就是说,在调用Where方法之前,不要将表达式编译成IL,否则您将必须获得LINQ to Objects版本。如果您希望LINQ将谓词隐藏到实体中,则需要将表达式
版本传递到查询表。其中()方法,而不是像您当前所做的那样将Func
版本传递给Enumerable.Where()方法,即在调用Where方法之前不要将表达式编译为IL,否则您将必须获得LINQ to Objects版本
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[AgentText] AS [AgentText],
FROM [dbo].[UCM_UserAgent] AS [Extent1]