我正在尝试对一组用户进行排序.我可以访问排序属性和方向(asc,desc).我目前的查询订单如下.但正如您所看到的那样,它并未考虑排序方向.如何在不必使用Dynamic
Linq或为“asc”或“desc”排序方向添加另一组语句的情况下构建此表达式.
- public override IQueryable<DalLinq.User> GetSort(IQueryable<DalLinq.User> query)
- {
- //SelectArgs.SortDirection <- Sort Direction
- switch (SelectArgs.SortProperty)
- {
- case "LastName":
- query = query.OrderBy(p => p.LastName);
- break;
- case "FirstName":
- query = query.OrderBy(p => p.FirstName);
- break;
- default:
- query = query.OrderBy(p => p.UserName);
- break;
- }
- return query;
- }
解决方法
理想情况下,您想使用OrderByDescending – 您当然可以作弊:
- public static class MyExtensionMethods
- {
- public static IOrderedQueryable<TSource> OrderBy<TSource,TValue>(
- this IQueryable<TSource> source,Expression<Func<TSource,TValue>> selector,bool asc)
- {
- return asc ? source.OrderBy(selector) : source.OrderByDescending(selector);
- }
- }
并使用OrderBy传递选择器和bool?
如果你不需要静态类型,你也可以从头开始动态构建表达式 – 当然 – 比如this short sample(类似于动态LINQ库).