public static IQueryable OrderBy(this IQueryable source, string ordering, params object[] values) { if (source == null) { throw new ArgumentNullException("source"); } if (ordering == null) { throw new ArgumentNullException("ordering"); } var resolver = new MapIdentifierResolver(); resolver.AddPositionalArguments(values); var parser = new ExpressionParser(ordering, resolver, source.ElementType); IEnumerable <DynamicOrdering> orderings = parser.ParseOrdering(); Expression queryExpr = source.Expression; string methodAsc = "OrderBy"; string methodDesc = "OrderByDescending"; foreach (DynamicOrdering o in orderings) { queryExpr = Expression.Call( typeof(Queryable), o.Ascending ? methodAsc : methodDesc, new Type[] { source.ElementType, o.Selector.Type }, queryExpr, Expression.Quote(Expression.Lambda(o.Selector, parser.IteratorParameter))); methodAsc = "ThenBy"; methodDesc = "ThenByDescending"; } return(source.Provider.CreateQuery(queryExpr)); }
public static LambdaExpression ParseLambda(Type itType, Type resultType, string expression, params object[] values) { var resolver = new MapIdentifierResolver(); resolver.AddPositionalArguments(values); return(ParseLambda(itType, resultType, expression, resolver)); }
public static LambdaExpression ParseLambda(Type resultType, string expression, params object[] values) { var resolver = new MapIdentifierResolver(); resolver.AddPositionalArguments(values); var parser = new ExpressionParser(expression, resolver); return(Expression.Lambda(parser.Parse(resultType))); }