Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linq查询中应用多个orderby_Linq_Sorting - Fatal编程技术网

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

如何在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

我想在多个列上应用ORDERBY,在LINQ中,有些是升序的,有些是降序的。我如何才能做到这一点?

借用:

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)