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

时间:2010-11-04 12:53:12

标签: c# linq-to-objects

我需要重新订购一个集合 最终结果应该是集合中具有propertyOne>的所有项目。 0和PropertyTwo = 0应该 先行,然后其他人应该遵循

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

IOrderedEnumerable<OrderLineItem> orderedItemList= 

OrderList.Cast<OrderLineItem>()
      .OrderBy(x => x.PropertyOne > 0)
      .ThenBy(x => x.PropertyTwo == 0);

任何建议?

5 个答案:

答案 0 :(得分:10)

通过比较你的lambda返回的内容,即布尔值,你是ordering你的收藏。 true is greater than false。因此,您需要使用OrderByDescending()

var orderedItems
    = OrderList.Cast<OrderLineItem>()
               .OrderByDescending(x => x.PropertyOne > 0)
               .ThenByDescending(x => x.PropertyTwo == 0);

或者反转您的谓词:

var orderedItems
    = OrderList.Cast<OrderLineItem>()
               .OrderBy(x => x.PropertyOne <= 0)
               .ThenBy(x => x.PropertyTwo != 0);

答案 1 :(得分:1)

var orderedList = OrderList.Cast<OrderLineItem>()
      .OrderBy(x => x.PropertyOne > 0)
      .ThenBy(x=> x.PropertyTwo == 0);

需要比较不指定“ThenBy”

答案 2 :(得分:0)

你应该在ThenBy中使用== not =

答案 3 :(得分:0)

这个怎么样?

IOrderedEnumerable<OrderLineItem> orderedItemList= 

OrderList.Cast<OrderLineItem>()
      .OrderBy(x => (x.PropertyOne > 0 && x.PropertyTwo == 0) ? 0 : 1);

答案 4 :(得分:0)

你在找这样的东西吗?

IOrderedEnumerable<OrderLineItem> orderedItemList=     
OrderList.Cast<OrderLineItem>()
      .OrderBy(x => (x.PropertyOne > 0 && x.PropertyTwo == 0) ? 0 : 1);

这将使两个标准首先为真,其他所有标准为真。如果我误解了你的规格,请忽略。