.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
展开
 我来答
百度网友16ad9e1
2013-05-30 · TA获得超过774个赞
知道小有建树答主
回答量:477
采纳率:0%
帮助的人:508万
展开全部

定义扩展方法:

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上后, 怎么都不正确
  请问知道是啥原因不?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式