我們使用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到實體。
可能會以第一種形式構建整個查詢,但後者在我們的場景中會更有用。有沒有辦法做到這一點?
這裏的目標是什麼?你認爲表達式樹比SQL更簡單或更容易維護嗎? – Andomar
@Andomar:以模塊化的方式構建動態LINQ。不,動態SQL在這些情況下構建起來要容易得多,但是由於許多其他原因,我們使用EF和Linq。所以我想在我的解決方案中堅持使用Linq EF「風味」。我認爲Linq在這裏是缺乏的:動態LINQ應該不比動態SQL更難。 –