我使用一些代碼(MSDN上可用的here)來動態地生成包含多個OR'子句'的LINQ表達式。建立'平'而不是'樹'LINQ表達式
相關的代碼是
var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue))));
var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal));
這會產生一個LINQ表達式,看起來是這樣的:
(((((ID = 5) OR (ID = 4)) OR (ID = 3)) OR (ID = 2)) OR (ID = 1))
我打的遞歸限制(100)使用這個表達式時,所以我'd想要生成如下表達式:
(ID = 5) OR (ID = 4) OR (ID = 3) OR (ID = 2) OR (ID = 1)
如何修改前按建設代碼來做到這一點?
微小的變化 - 用equalsList.Count-1替換equalsList.Length - 它完美的工作。謝謝。 – 2010-06-01 23:54:36