public static Expression <Func <TValue, bool> > CreateExpression <TValue>(
            Expression <Func <TValue, bool> > expressionA,
            Expression expressionB,
            ParameterExpression parameter,
            LambdaMerge typeMerge) where TValue : class
        {
            var predicate = expressionB.CreateExpression <TValue>(parameter);

            if (expressionA.IsNull())
            {
                return(predicate);
            }
            var expressionsJoined = JoinExpressions(expressionA, predicate, parameter, typeMerge);

            return(expressionsJoined);
        }
 private static Expression <Func <TValue, bool> > JoinExpressions <TValue>(
     Expression <Func <TValue, bool> > predicateA,
     Expression <Func <TValue, bool> > predicateB,
     ParameterExpression parameter,
     LambdaMerge typeMerge) where TValue : class
 {
     if (typeMerge == LambdaMerge.And)
     {
         var expression = AndAlso(predicateA, predicateB, parameter);
         return(expression.CreateExpression <TValue>(parameter));
     }
     else
     {
         var expression = OrElse(predicateA, predicateB, parameter);
         return(CreateExpression <TValue>(expression, parameter));
     }
 }
示例#3
0
        private static Expression <Func <TValue, bool> > MergeExpressions <TValue>(
            this Expression <Func <TValue, bool> > predicate,
            LambdaMerge typeMerge,
            ParameterExpression parameter,
            Expression <Func <TValue, bool> > predicateMerge)
            where TValue : class
        {
            Expression lambda;

            if (typeMerge == LambdaMerge.And)
            {
                lambda = Expression.AndAlso(
                    Expression.Invoke(predicate, parameter),
                    Expression.Invoke(predicateMerge, parameter));
            }
            else
            {
                lambda = Expression.OrElse(
                    Expression.Invoke(predicate, parameter),
                    Expression.Invoke(predicateMerge, parameter));
            }
            return(Expression.Lambda <Func <TValue, bool> >(lambda, parameter));
        }