首页 > 学院 > 开发设计 > 正文

Combining multiple expressions 合并多个System.Linq.Expressions.Expression

2019-11-17 02:50:49
字体:
来源:转载
供稿:网友

Combining multiple exPRessions 合并多个System.Linq.Expressions.Expression

using System;using System.Collections.Generic;using System.Linq;namespace System.Linq.Expressions{    public static class ExpressionExtensions    {        public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)        {            var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());            return Expression.Lambda<Func<T, bool>>(Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);        }        public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)        {            var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());            return Expression.Lambda<Func<T, bool>>(Expression.And(expr1.Body, invokedExpr), expr1.Parameters);        }        public static Expression<Func<T, bool>> WhereAnd<T>(this IEnumerable<Expression<Func<T, bool>>> exprs)        {            Expression<Func<T, bool>> FinalQuery = t => true;            foreach (var expr in exprs)            {                FinalQuery = FinalQuery.And(expr);            }            return FinalQuery;        }        public static Expression<Func<T, bool>> WhereOr<T>(this IEnumerable<Expression<Func<T, bool>>> exprs)        {            Expression<Func<T, bool>> FinalQuery = t => false;            foreach (var expr in exprs)            {                FinalQuery = FinalQuery.Or(expr);            }            return FinalQuery;        }    }}

  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表