说我有 ListA={null,3,2,null}
。
ListA.OrderBy(x=>x.ID) //would return me null,null,2,3
如果我的目标是得到2,3,null,null
,目前我只能想到把null item抽出来,手动pump到后面。
是否有一种干净的方法可以返回 2,3,null,null
?
最佳答案
您可以使用 OrderByDescending + ThenBy
(假设它是一个 List<int?>
):
var orderedList = ListA
.OrderByDescending(x => x.HasValue)
.ThenBy(x => x);
x.HasValue
返回 true
或 false
其中 true
高于false
.这就是我使用 OrderByDescending
的原因.
如果你想对原始列表进行排序,我会使用 List.Sort
自定义 Compaison<T>
对待null
作为最高值:
ListA.Sort((a1, a2) => (a1 ?? int.MaxValue).CompareTo(a2 ?? int.MaxValue));
这样效率更高,因为它不需要创建新列表。
关于c# - Lambda 如何按列表升序对元素重新排序并将空值放在后面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142976/