假设我有linq表达式q,那么我想在此查询中添加一个排序:
q = q.OrderBy(p => p.Total);
但是对于sort,有SQL的desc / asc选项,如何在上面的linq表达式中添加它?
答案 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);
如果您想按多列排序,请使用ThenBy
和ThenByDescending
方法。
q = q.OrderBy(p => p.Col1).ThenByDescending(p => p.Col2);