private static Expression ConvertForBinaryExpression <TTo>(BinaryExpression expression) { if (expression == null) { return(null); } var expressionDisassembler = new ExpressionDisassembler(_mapper); var expressionAssembler = new ExpressionAssembler(_mapper); var expressionHelper = new InternalExpressionHelper(_mapper); var list1 = new List <ExpressionType>(); var parameter = Expression.Parameter(typeof(TTo), "x"); var list2 = expressionDisassembler.DisassembleBinaryExpression(expression, list1).ToList(); if (list2.Count() == 1) { return(Expression.Lambda <Func <TTo, bool> >(expressionAssembler.AssemblySimpleBinaryExpression <TTo>(list2[0], parameter) .MaybeAs <BinaryExpression>() .GetOrDefault(null), parameter)); } else { List <Expression> listConvertedExpressions = expressionHelper.CollectListOfExpressions <TTo>(list2, parameter).ToList(); if (list1.Count == 0) { list1.Add(list2.Last().ExpressionWithMethodModel.ValueOfExpressionType); } return(Expression.Lambda <Func <TTo, bool> >(expressionAssembler.AssemblyExpression(listConvertedExpressions, list1), parameter)); } }
private static Expression ConvertForUnaryExpression <TTo>(UnaryExpression expression) { if (expression != null) { var expressionDisassembler = new ExpressionDisassembler(_mapper); var expressionAssembler = new ExpressionAssembler(_mapper); var concatedList = new List <ExpressionType>(); var parameter = Expression.Parameter(typeof(TTo), "x"); var list = expressionDisassembler.DisassembleUnaryExpression(expression, concatedList).ToList(); if (list.Count() == 1) { return(Expression.Lambda <Func <TTo, bool> >((expressionAssembler.AssemblySimpleUnaryExpression <TTo>(list[0], parameter, null)) .MaybeAs <UnaryExpression>() .GetOrDefault(null), parameter)); } } return(null); }
private static Expression ConvertForCallExpression <TTo>(MethodCallExpression expression) { if (expression != null) { var expressionDisassembler = new ExpressionDisassembler(_mapper); var expressionAssembler = new ExpressionAssembler(_mapper); var concatedList = new List <ExpressionType>(); var parameter = Expression.Parameter(typeof(TTo), "x"); var list = expressionDisassembler.DisassembleCallExpression(expression, concatedList).ToList(); if (list.Count() == 1) { ReadOnlyCollection <Expression> arguments = expression.Arguments; return(Expression.Lambda <Func <TTo, bool> >(expressionAssembler.AssemblySimpleCallExpression <TTo>(list[0], parameter, arguments) .MaybeAs <MethodCallExpression>() .GetOrDefault(null), parameter)); } } return(null); }