一个关于Expression<Func<T, TResult>>动态累加的问题。
要求返回一个表达式,
e=>e.ID==1&&e.ID==2&&e.ID==3...e.ID==n
请问应该如何动态的累加啊。求代码!!!
Expression<Func<T, TResult>> myTest = e=>e.ID==1;
....
retrun myTest;
var ints =
new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//var r = ints.Where(i => i =5&&i==6);
// 要实现的表达式
// 创建参数 i
var parameter =Expression.Parameter(typeof(int), "i");
// 创建常量5
var constant =Expression.Constant(5);
// 创建比较表达式 i = 5
var bin = Expression.Equal(parameter, constant);
for(int i=6;i<7;i++)
bin = Expression.Or(bin, Expression.Equal(parameter, Expression.Constant(i)));
// 获取Lambda表达式
var lambda = Expression.Lambda<Func<int, bool>>(bin, parameter);
// 测试 通过 Compile 方法获取 Delegate
var _r = ints.Where(lambda.Compile());
foreach (var v in _r)
Response.Write(v+"<br>");
显示:
5
6
牛人一个!
Expression<Func<T, TResult>> myTest = e=>e.ID==1; for(int i = 2; i <= n; i++) { myTest = Expression<Func<T, TResult>>.And(myTest, e=>e.ID==n); } retrun myTest;
Expression<Func<T, TResult>>.And()返回的是一个BinaryExpression类型。
是不是少了点什么代码需要转换啊?
@寒风吹过:确实有问题。还要再研究,对EXPRESSION确实不懂。