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); }