2014-01-13 60 views
1

我們使用Entity Framework,並且我們需要對我們的對象進行一些運行時構建查詢。從頭開始構建表達式樹似乎是一個大量的工作,所以我們要使用「System.Linq.Dynamic」動態Linq給EntityFramework提供了錯誤

通過我得到的樣本工作這項工作:

dbModel.As.Where("AStuff.Contains(@0) OR AStuff.Contains(@1)","ac","bc")

但是,如果我嘗試建立seperately表達的是這樣的:

Expression<Func<A, bool>> predicateA = 
     DynamicExpression.ParseLambda<A, bool>(     
      "AStuff.Contains(@0)", 
      "ac" 
     ); 

    Expression<Func<A,bool>> predicateB = 
     DynamicExpression.ParseLambda<A, bool>(
      "AStuff.Contains(@0)", 
      "bc" 
     ); 

    dbModel.As.Where("@0(it) OR @1(it)", predicateA, predicateB); 

它爆炸有例外: NotSupportedException異常>>的LINQ表達式節點類型「調用」不支持LINQ到實體。

可能會以第一種形式構建整個查詢,但後者在我們的場景中會更有用。有沒有辦法做到這一點?

+0

這裏的目標是什麼?你認爲表達式樹比SQL更簡單或更容易維護嗎? – Andomar

+0

@Andomar:以模塊化的方式構建動態LINQ。不,動態SQL在這些情況下構建起來要容易得多,但是由於許多其他原因,我們使用EF和Linq。所以我想在我的解決方案中堅持使用Linq EF「風味」。我認爲Linq在這裏是缺乏的:動態LINQ應該不比動態SQL更難。 –

回答

0

只需使用Predicate Builder即可加入(或/和)多個謂詞。

+1

謝謝,但是它讓我感到擔心,我越來越遠離「將此字符串解析爲Linq」解決方案,這在SQL日期中非常容易實現......我希望MS會對此做一些工作在將來 –