我正在尝试对一组用户进行排序.我可以访问排序属性和方向(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库).