예제 #1
0
 public static IQueryable OrderBy(this IQueryable source, string ordering, QueryResolver queryResolver)
 {
     if (source == null)
     {
         throw new ArgumentNullException("source");
     }
     if (ordering == null)
     {
         throw new ArgumentNullException("ordering");
     }
     ParameterExpression[] parameters = new ParameterExpression[] { Expression.Parameter(source.ElementType, "") };
     IEnumerable<DynamicOrdering> enumerable = new ExpressionParser(parameters, ordering, queryResolver).ParseOrdering();
     Expression expression = source.Expression;
     string str = "OrderBy";
     string str2 = "OrderByDescending";
     foreach (DynamicOrdering ordering2 in enumerable)
     {
         expression = Expression.Call(typeof(Queryable), ordering2.Ascending ? str : str2, new Type[] { source.ElementType, ordering2.Selector.Type }, new Expression[] { expression, Expression.Quote(DynamicExpression.Lambda(ordering2.Selector, parameters)) });
         str = "ThenBy";
         str2 = "ThenByDescending";
     }
     return source.Provider.CreateQuery(expression);
 }
예제 #2
0
 public static LambdaExpression ParseLambda(ParameterExpression[] parameters, Type resultType, string expression, QueryResolver queryResolver)
 {
     ExpressionParser parser = new ExpressionParser(parameters, expression, queryResolver);
     return Lambda(parser.Parse(resultType), parameters);
 }