重新订购一个集合我做错了什么?

use*_*969 4 c# linq-to-objects

我需要重新排序一个集合最后的结果应该是集合中propertyOne> 0和PropertyTwo = 0的所有项应该是第一个,然后其他项应该遵循

我做了以下但我不确定为什么它不起作用!

IOrderedEnumerable<OrderLineItem> orderedItemList= 

OrderList.Cast<OrderLineItem>()
      .OrderBy(x => x.PropertyOne > 0)
      .ThenBy(x => x.PropertyTwo == 0);
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Fré*_*idi 10

您通过比较lambda返回的内容(即布尔值)来命令您的集合.true 大于 false.因此,您需要使用OrderByDescending():

var orderedItems
    = OrderList.Cast<OrderLineItem>()
               .OrderByDescending(x => x.PropertyOne > 0)
               .ThenByDescending(x => x.PropertyTwo == 0);
Run Code Online (Sandbox Code Playgroud)

或者反转你的谓词:

var orderedItems
    = OrderList.Cast<OrderLineItem>()
               .OrderBy(x => x.PropertyOne <= 0)
               .ThenBy(x => x.PropertyTwo != 0);
Run Code Online (Sandbox Code Playgroud)