如何在linq查询中应用多个orderby

Fra*_*dal 20 linq sorting

我希望在多个列上应用order by升序,而其他列在LINQ中按降序排列.我怎样才能做到这一点?

Ste*_*ven 31

var sortedCollection =
    from item in collection
    orderby item.Property1, item.Property2 descending, item.Property3
    select item;
Run Code Online (Sandbox Code Playgroud)


小智 27

借用101 LINQ样本:

orderby p.Category, p.UnitPrice descending
Run Code Online (Sandbox Code Playgroud)

或作为Lambda:

products.OrderBy(p => p.Category).ThenByDescending(p => p.UnitPrice); 
Run Code Online (Sandbox Code Playgroud)


Ada*_*lph 6

Steven的答案可行,但我更喜欢方法链接到声明性LINQ语法,例如

collection
    .OrderBy(e => e.Property1)
    .ThenByDescending(e => e.Property2)
    .ThenBy(e => e.Property3)
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是一个偏好问题.在读/写代码时,我不喜欢在基于方法的C#代码和声明性LINQ代码之间进行上下文切换.我发现使用方法链接时更容易阅读并查看发生了什么.最后,LINQ被编译器转换为方法调用,所以我更喜欢直接进入马的口,让我的代码更直接地反映在运行时执行的语句(JIT编译). (8认同)