如何使用linq为sql添加排序方向?

时间:2009-11-11 16:43:56

标签: .net linq linq-to-sql sorting

假设我有linq表达式q,那么我想在此查询中添加一个排序:

q = q.OrderBy(p => p.Total);

但是对于sort,有SQL的desc / asc选项,如何在上面的linq表达式中添加它?

2 个答案:

答案 0 :(得分:4)

还有另一种方法,OrderByDescending

可能有点过分,但是如果你真的希望能够传递一个指示排序顺序的参数,你可以创建一个扩展方法:

public static IOrderedEnumerable<TResult> OrderBy<TResult,TKey>(this IEnumerable<TResult> source, Func<TResult, TKey> keySelector, bool ascending)
{
   Func<Func<TResult, TKey>, IOrderedEnumerable<TResult>> orderMethod = source.OrderBy;

   if(!ascending)
      orderMethod = source.OrderByDescending;

   return orderMethod.Invoke(keySelector);
}

这样你就能做到

bool ascending = true;
list.OrderBy(item => item.Name, ascending);

答案 1 :(得分:3)

OrderBy将按升序排序,对于降序,请使用OrderByDescending

q = q.OrderByDescending(p => p.Total);

如果您想按多列排序,请使用ThenByThenByDescending方法。

q = q.OrderBy(p => p.Col1).ThenByDescending(p => p.Col2);
相关问题