private static Expression GetExpression <T>(ParameterExpression param, ExpressionInput filter)
        {
            try
            {
                MemberExpression   member   = Expression.Property(param, filter.PropertyName);
                ConstantExpression constant = Expression.Constant(filter.Value);
                ConstantExpression stringComparisonConstant = Expression.Constant(StringComparison.OrdinalIgnoreCase);

                switch (filter.Operation)
                {
                case Operation.Equals:
                    return(Expression.Equal(member, constant));

                case Operation.NotEquals:
                    return(Expression.NotEqual(member, constant));

                case Operation.GreaterThan:
                    return(Expression.GreaterThan(member, constant));

                case Operation.GreaterThanOrEqual:
                    return(Expression.GreaterThanOrEqual(member, constant));

                case Operation.LessThan:
                    return(Expression.LessThan(member, constant));

                case Operation.LessThanOrEqual:
                    return(Expression.LessThanOrEqual(member, constant));

                case Operation.Contains:
                    return(Expression.Call(member, containsMethod, new[] { constant }));

                case Operation.ContainsWithToLower:
                    var toLowerMember = Expression.Call(member, toLowerMethod);
                    return(Expression.Call(toLowerMember, containsMethod, constant));

                case Operation.ToStringWithContains:
                    var tostringMember = Expression.Call(member, toStringMethod);
                    return(Expression.Call(tostringMember, containsMethod, constant));

                case Operation.StartsWith:
                    return(Expression.Call(member, startsWithMethod, constant));

                case Operation.EndsWith:
                    return(Expression.Call(member, endsWithMethod, constant));

                case Operation.StringEquals:
                    var zeroConstant      = Expression.Constant(0);
                    var compareExpression = Expression.Call(compareMethod, member, constant, stringComparisonConstant);
                    return(Expression.Equal(compareExpression, zeroConstant));
                }

                return(null);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        public ExpressionInput getExpressionInput(string expressionStr)
        {
            //switch(contain(expressionStr,"=="))
            //{
            //    case true:
            //        return
            //}

            ExpressionInput expressionInput = new ExpressionInput();

            if (expressionStr.Contains("=="))
            {
                string result = expressionStr;
                int    start  = result.LastIndexOf('=') + 1;
                int    length = result.Length;
                expressionInput.PropertyName = result.Substring(0, result.IndexOf('=')).Trim();
                expressionInput.Value        = result.Substring(start, (length - start)).Trim().Trim(')').Trim('\"');
                expressionInput.Operation    = Operation.Equals;
            }
            else if (expressionStr.Contains("<="))
            {
                string result = expressionStr;
                int    start  = result.LastIndexOf('=') + 1;
                int    length = result.Length;
                expressionInput.PropertyName = result.Substring(0, result.IndexOf('<')).Trim();
                expressionInput.Value        = result.Substring(start, (length - start)).Trim().Trim(')').Trim('\"');
                expressionInput.Operation    = Operation.LessThanOrEqual;
            }
            else if (expressionStr.Contains(">="))
            {
                string result = expressionStr;
                int    start  = result.LastIndexOf('=') + 1;
                int    length = result.Length;
                expressionInput.PropertyName = result.Substring(0, result.IndexOf('>')).Trim();
                expressionInput.Value        = result.Substring(start, (length - start)).Trim().Trim(')').Trim('\"');
                expressionInput.Operation    = Operation.GreaterThanOrEqual;
            }
            else if (expressionStr.Contains("<"))
            {
                string result = expressionStr;
                int    start  = result.LastIndexOf('<') + 1;
                int    length = result.Length;
                expressionInput.PropertyName = result.Substring(0, result.IndexOf('<')).Trim();
                expressionInput.Value        = result.Substring(start, (length - start)).Trim().Trim(')').Trim('\"');
                expressionInput.Operation    = Operation.LessThan;
            }
            else if (expressionStr.Contains(">"))
            {
                string result = expressionStr;
                int    start  = result.LastIndexOf('>') + 1;
                int    length = result.Length;
                expressionInput.PropertyName = result.Substring(0, result.IndexOf('>')).Trim();
                expressionInput.Value        = result.Substring(start, (length - start)).Trim().Trim(')').Trim('\"');
                expressionInput.Operation    = Operation.GreaterThan;
            }
            else if (expressionStr.Contains("!="))
            {
                string result = expressionStr;
                int    start  = result.LastIndexOf('=') + 1;
                int    length = result.Length;
                expressionInput.PropertyName = result.Substring(0, result.IndexOf('!')).Trim();
                expressionInput.Value        = result.Substring(start, (length - start)).Trim().Trim(')').Trim('\"');
                expressionInput.Operation    = Operation.NotEquals;
            }
            return(expressionInput);
        }