2013-11-27 23 views
1

我有一個PredicateBuilder這我是從 http://www.albahari.com/nutshell/predicatebuilder.aspx爲什麼EntityFramework不使用我的謂詞?

這裏是我如何使用它:

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事件探查器:

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。

回答

3

如果你想謂詞通過LINQ來hadled到實體需要將Expression<Func<T,bool>>版本傳遞給Queryable.Where()方法,而不是傳遞Func<T,bool>版本的Enumerable.Where()方法中,你正在做即在調用Where方法之前不要將表達式編譯爲IL,否則您將必然獲得LINQ to Objects版本。

相關問題