我需要重新订购一个集合 最终结果应该是集合中具有propertyOne>的所有项目。 0和PropertyTwo = 0应该 先行,然后其他人应该遵循
我做了以下但我不确定为什么它不起作用!
IOrderedEnumerable<OrderLineItem> orderedItemList=
OrderList.Cast<OrderLineItem>()
.OrderBy(x => x.PropertyOne > 0)
.ThenBy(x => x.PropertyTwo == 0);
任何建议?
答案 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);
这将使两个标准首先为真,其他所有标准为真。如果我误解了你的规格,请忽略。