Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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>());
        }