Beispiel #1
0
        public static Expression <Func <TSource, bool> > And <TSource>(this Expression <Func <TSource, bool> > a, Expression <Func <TSource, bool> > b)
        {
            Type typeFromHandle = typeof(TSource);
            ParameterExpression parameterExpression = Expression.Parameter(typeFromHandle, "root");
            Expression          left  = ParameterExpressionReplacer.Replace(a.Body, parameterExpression);
            Expression          right = ParameterExpressionReplacer.Replace(b.Body, parameterExpression);
            BinaryExpression    body  = Expression.And(left, right);

            return(Expression.Lambda <Func <TSource, bool> >(body, new ParameterExpression[]
            {
                parameterExpression
            }));
        }
Beispiel #2
0
        public static LambdaExpression And(this LambdaExpression a, LambdaExpression b)
        {
            if (a == null)
            {
                return(b);
            }
            if (b == null)
            {
                return(a);
            }

            Type rootType    = a.Parameters[0].Type;
            var  memberParam = Expression.Parameter(rootType, "root");
            var  aNewBody    = ParameterExpressionReplacer.Replace(a.Body, memberParam);
            var  bNewBody    = ParameterExpressionReplacer.Replace(b.Body, memberParam);
            var  newBody     = Expression.And(aNewBody, bNewBody);
            var  lambda      = Expression.Lambda(a.Type, newBody, memberParam);

            return(lambda);
        }