【发布时间】:2017-05-30 01:15:07
【问题描述】:
我希望能够为我的查询动态添加排序:
Expression<Func<IQueryable<MyEntity>, IOrderedQueryable<MyEntity>>> order1 = e => e.OrderBy(x => x.Weight);
Expression<Func<IQueryable<MyEntity>, IOrderedQueryable<MyEntity>>> order2 = e => e.OrderByDescending(x => x.Weight).ThenBy(x => x.Price);
Expression<Func<IQueryable<MyEntity>, IOrderedQueryable<MyEntity>>> order3 = e => e.OrderBy(x => x.Category).ThenBy(x => x.Price);
IQueryable<MyEntity> query = any EF query;
var transformedQuery = query.Transform(order1/order2/order3);
如何实现Transform()?
public static IQueryable<T> Transform<T>(this IQueryable<T> query, Expression<Func<IQueryable<T>, IOrderedQueryable<T>>> orderExpr)
{
// ??????????????????
}
我的问题是我不希望有 2 个重载用于升序/降序排序。我需要应用任何OrderBy()/OrderByDescending() 表达式或它们的组合。
【问题讨论】:
-
不能在AddOrder中也添加第一个订单吗?
-
很遗憾,没有,我需要一个通用方法,在向查询添加排序后执行其他转换。
-
原来的OrderBy/ThenBy有什么问题?正如@hdv 所说,你不需要任何其他东西(如果我没有错过任何东西......)
-
这个例子没有意义。我们来看看前2个例子。第一个按重量排序,第二个按重量降序排序!!!到底该怎么办???
标签: c# .net entity-framework-6 expression-trees iqueryable