如何在linq查询中应用多个orderby
我想在多个列上应用ORDERBY,在LINQ中,有些是升序的,有些是降序的。我如何才能做到这一点?借用:如何在linq查询中应用多个orderby,linq,sorting,Linq,Sorting,我想在多个列上应用ORDERBY,在LINQ中,有些是升序的,有些是降序的。我如何才能做到这一点?借用: var sortedCollection = from item in collection orderby item.Property1, item.Property2 descending, item.Property3 select item; 或者作为Lambda: products.OrderBy(p => p.Category).ThenByDes
var sortedCollection =
from item in collection
orderby item.Property1, item.Property2 descending, item.Property3
select item;
或者作为Lambda:
products.OrderBy(p => p.Category).ThenByDescending(p => p.UnitPrice);
应该是简单的陈述问题
orderby x, y descending, z
请参见Steven的答案会起作用,但我更喜欢方法链接而不是声明性LINQ语法,例如
collection
.OrderBy(e => e.Property1)
.ThenByDescending(e => e.Property2)
.ThenBy(e => e.Property3)
为了完整起见,作为这里其他好答案的替代方案
还有一个重载或OrderBy,它接受一个IComparer,如果这是您想要的常见顺序模式,那么您可能希望创建一个类,该类包含元素,并将其传递给OrderBy子句,让它处理更复杂的顺序,这样,当您以相同的方式对查询排序时,它就可以重复使用。为什么要这样做?LINQ比扩展方法和lambda更具可读性。我认为这是一个偏好问题。在读/写代码时,我不喜欢在基于方法的C#代码和声明性LINQ代码之间进行上下文切换。我发现当使用方法链接时,阅读和查看发生了什么更容易。此外,最终,LINQ由编译器转换为方法调用,因此我更喜欢直接进入马口,让我的代码更直接地反映在运行时执行(JIT编译)的语句。
collection
.OrderBy(e => e.Property1)
.ThenByDescending(e => e.Property2)
.ThenBy(e => e.Property3)