.Net中想做Lambda表达式的逻辑运算
publicstaticExpression<Func<T,Boolean>>And<T>(thisExpression<Func<T,Boolean>>expressi...
public static Expression<Func<T, Boolean>> And<T>(
this Expression<Func<T, Boolean>> expressionOne,
Expression<Func<T, Boolean>> expressionTwo
)
{
return ?????
}
方法输入输出如上, 想做一个逻辑与的扩展方法, 内容应该怎么写呢?
expressionOne是x => x.StudentID == 1
expressionTwo是x => x.ClassID == 1
想得到结果是x => x.StudentID == 1 && x.ClassID == 1 展开
this Expression<Func<T, Boolean>> expressionOne,
Expression<Func<T, Boolean>> expressionTwo
)
{
return ?????
}
方法输入输出如上, 想做一个逻辑与的扩展方法, 内容应该怎么写呢?
expressionOne是x => x.StudentID == 1
expressionTwo是x => x.ClassID == 1
想得到结果是x => x.StudentID == 1 && x.ClassID == 1 展开
展开全部
定义扩展方法:
public static class Ext
{
public static Expression<Func<T, Boolean>> And<T>(
this Expression<Func<T, Boolean>> expressionOne,
Expression<Func<T, Boolean>> expressionTwo
)
{
var param = Expression.Parameter(typeof(T), "x");
var body = Expression.AndAlso(
Expression.Invoke(expressionOne, param),
Expression.Invoke(expressionTwo, param)
);
var lambda = Expression.Lambda<Func<T, bool>>(body, param);
return lambda;
}
}
使用:
Expression<Func<int, Boolean>> exp = x => x > 10;
var result= exp.And(x => x < 100).Compile().Invoke(11); //true
result = exp.And(x => x < 100).Compile().Invoke(5); //false
result = exp.And(x => x < 100).Compile().Invoke(101); //false
追问
一开始我尝试用And方法, 后来发现是按位And, 然后我也用了AndAlso方法.
这个表达式是用于在一个IQueryable的一组对象中做Where的时候当参数的, 奇怪的是, 在我本机(Win 7 64)使用没有问题, 把代码一放到我们的win 2008 R2 64上后, 怎么都不正确
请问知道是啥原因不?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询