【问题标题】:Why does EntityFramework NOT use my predicate?为什么 EntityFramework 不使用我的谓词?
【发布时间】:2013-11-27 10:13:55
【问题描述】:

我有一个 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 => x.AgentText = "SomeText"。因为我想构建一个动态 LINQ 查询,所以我使用 PredicateBuilder。

【问题讨论】:

    标签: linq entity-framework predicate


    【解决方案1】:

    如果您希望 LINQ to Entities 处理谓词,则需要将 Expression&lt;Func&lt;T,bool&gt;&gt; 版本传递给 Queryable.Where() 方法,而不是像您一样将 Func&lt;T,bool&gt; 版本传递给 Enumerable.Where() 方法目前正在这样做,即在调用 Where 方法之前不要将表达式编译到 IL 中,否则您必然会获得 LINQ to Objects 版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多