Linq从字符串排序方向

zzz*_*zzz 6 c# linq sorting linq-to-sql sortdirection

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

Mar*_*ell 12

理想情况下,你想使用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); 
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用OrderBy传递选择器和布尔?

如果你不需要静态类型,你也可以从头开始动态构建表达式 - 当然 - 就像这个简短的样本(本质上类似于动态LINQ库).