private static string GetSQLStrQueryDetail(List <QueryParameterEntity> queryDetail) { StringBuilder sb = new StringBuilder(1000); Int16 i = 0; foreach (var p in queryDetail) { if (i != 0) { sb.Append(String.Format(" {0} ", p.OperatorType)); } if (p.Comparier == StructSQLComparier.SQLComparierType.StrContains) { sb.Append(String.Format("{0}.{1}(@{2})", p.ColumnName, StructSQLComparier.GetSQLComparier(p.Comparier), i)); } else { sb.Append(String.Format("{0} {1} @{2}", p.ColumnName, StructSQLComparier.GetSQLComparier(p.Comparier), i)); } i++; } return(sb.ToString()); }
public static List <T> QueryData <T>(IQueryable <T> contextItem, List <QueryParameterEntity> queryParameters) { List <ParameterExpression> pars = new List <ParameterExpression>(); string sqlStr = string.Empty; System.Linq.Expressions.Expression predicateBody = null; var parameter = System.Linq.Expressions.Expression.Parameter(typeof(T)); MethodCallExpression CallExpression = null; foreach (var p in queryParameters) { var property = System.Linq.Expressions.Expression.Property(parameter, p.ColumnName); var value = System.Linq.Expressions.Expression.Constant(p.DataValue); var type = Type.GetType(p.DataType); if (p.Comparier == StructSQLComparier.SQLComparierType.StrContains) { var containsmethod = type.GetMethod(StructSQLComparier.GetSQLComparier(p.Comparier), new[] { type }); CallExpression = System.Linq.Expressions.Expression.Call(property, containsmethod, value); predicateBody = System.Linq.Expressions.Expression.And(CallExpression, CallExpression); } else { predicateBody = LambdaParse(p.Comparier, property, value); } var lambda = System.Linq.Expressions.Expression.Lambda <Func <T, bool> >(predicateBody, parameter); contextItem = contextItem.Where(lambda); } return(contextItem.ToList <T>()); }