首页新闻找找看学习计划

关于Expression<Func<T, TResult>>

1
悬赏园豆:50 [已解决问题] 解决于 2012-06-01 17:43

一个关于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;

寒风吹过的主页 寒风吹过 | 初学一级 | 园豆:149
提问于:2012-06-01 15:10
< >
分享
最佳答案
1

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

收获园豆:35
基本原则 | 初学一级 |园豆:64 | 2012-06-01 17:34

牛人一个!

无之无 | 园豆:5085 (大侠五级) | 2012-06-01 17:59
其他回答(1)
2
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;
收获园豆:15
无之无 | 园豆:5085 (大侠五级) | 2012-06-01 15:50

Expression<Func<T, TResult>>.And()返回的是一个BinaryExpression类型。

 

是不是少了点什么代码需要转换啊?

支持(0) 反对(0) 寒风吹过 | 园豆:149 (初学一级) | 2012-06-01 16:18

@寒风吹过:确实有问题。还要再研究,对EXPRESSION确实不懂。

支持(0) 反对(0) 无之无 | 园豆:5085 (大侠五级) | 2012-06-01 17:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册