正在创建表达式<;Func<;IQueryable<;T>;,IOrderedQueryable<;
本文关键字:lt gt IOrderedQueryable IQueryable Func 表达式 创建 | 更新日期: 2024-10-19 11:02:41
我想创建一个Expression<Func<IQueryable<T>, IOrderedQueryable<T>>>
,我有以下代码:
Expression selector = q => q.RegistrationDate
MethodInfo orderByMethodInfo = typeof(Queryable).GetMethods().First(method => method.Name == "OrderBy" && method.GetParameters().Count() == 2).MakeGenericMethod(argumentTypes);
MethodInfo orderByDescMethodInfo = typeof(Queryable).GetMethods().First(method => method.Name == "OrderByDescending" && method.GetParameters().Count() == 2).MakeGenericMethod(argumentTypes);
我将从上面的代码中创建c => c.OrderBy(q => q.RegistrationDate)
或c => c.OrderByDescending(q => q.RegistrationDate)
,或者类似于c => c.OrderByDescending(q => q.RegistrationDate).ThenBy(q=>q.Name)
的东西
你能指导我怎么做吗?
var paramExpr = Expression.Parameter(typeof(IQueryable<T>))
var orderByExpr = Expression.Call(orderByMethodInfo, paramExpr, selector);
var expr = Expression.Lambda<Func<IQueryable<T>, IOrderedQueryable<T>>>(orderByExpr, paramExpr);
其中,T
是selector
表达式中具有RegistrationDate
属性的类型。
您可以使用MakeGenericType
:从参数类型中获取可查询类型
Type argType = typeof(DateTime);
Type queryableType = typeof(IQueryable<>).MakeGenericType(argType);