我有一个如下列表:
|Name|Val. Date 1| Val. Date 2|
|PA | 200| 200|
|PB | 0| 300|
|PC | 200| 0|
|PD | 150| 150|
按Val订购清单。 Date1会给我一些东西:PA,PC,PD和PB。如果我为Val做了类似的事情。日期2。
但我真正需要做的是按照日期1或日期2中记录的最高值来订购,结果如下:PB,PA,PC和PD。
我该如何解决这个问题?
答案 0 :(得分:3)
使用Math.Max()
获取最大值,然后按顺序排序:
list.OrderByDescending(x => Math.Max(x.Date1, x.Date2));
答案 1 :(得分:2)
由于您使用的是列表,因此可以使用List.Sort(Comparison<T>)
对列表进行内联排序:
list.Sort((lhs, rhs) =>
(
Math.Max(lhs.Val.Date1, lhs.Val.Date2) -
Math.Max(rhs.Val.Date1, rhs.Val.Date2)
));
如果您使用.ToList()
将Linq解决方案的结果分配回列表,那么通过一个重要警告来进行就地排序会更有效:
List.Sort()
不是稳定的排序,因此它不保留相等值的排序。然而,Linq OrderBy
是稳定的。
答案 2 :(得分:0)
另一种方法是使用类似的东西:
var sortedList = ListOfData.OrderByDescending(x=>x.Val1).ThenByDescending(x=>x.Val2);
请参阅:
Multiple “order by” in LINQ
Ordering data in LINQ queries by more than one column
Multiple Field Sorting by Field Names Using Linq