public Func <TEntity, bool> GenerateExpression <T>(
            Expression <Func <TEntity, T> > fieldExpression,
            T value,
            Operator filterOperator,
            bool caseSensitive = true)
        {
            BuiltExpression expression = BuildExpression(fieldExpression, value, filterOperator, caseSensitive);
            var             result     = Expression.Lambda <Func <TEntity, bool> >(expression.Condition, expression.Parameter);

            return(result.Compile());
        }
        private Expression <Func <TEntity, bool> > GetResultExpression(IExpressionCondition <TEntity>[] filterConditions, ParameterExpression parameter, Expression <Func <TEntity, bool> > resultExpression)
        {
            var visitor = new ParameterVisitor(parameter);

            foreach (IExpressionCondition <TEntity> condition in filterConditions)
            {
                BuiltExpression expression = BuildExpression(condition.Field, condition.Value, condition.Operator, condition.CaseSensitive);
                visitor.AddParamToReplace(expression.Parameter);
                if (resultExpression == null)
                {
                    resultExpression = Expression.Lambda <Func <TEntity, bool> >(visitor.Visit(expression.Condition), parameter);
                    continue;
                }

                var exp = Expression.And(resultExpression.Body, visitor.Visit(expression.Condition));
                resultExpression = Expression.Lambda <Func <TEntity, bool> >(exp, parameter);
            }

            return(resultExpression);
        }