提问人:Alireza Ahmadi 提问时间:7/15/2023 最后编辑:Vivek NunaAlireza Ahmadi 更新时间:7/21/2023 访问量:22
具有 null 值的实体应该是在 C 中使用 order by 排序后的最后一个实体#
entity that has null value should be last entity after sorting by using order by in c#
问:
我有一个列表,我想使用 Linq(order by method) 按“sortOrder”对其进行排序,列表中的一些实体具有“sortOrder”属性的 null 值,我想用以下规则对它们进行排序:每个在“sortOrder”属性中具有 null 值的实体,都将在我的列表的最后一个索引中(我不关心有多少实体可以有 null 值,也不关心排序具有 null 值的实体)
这是我的代码:
myList.Select(Map).OrderBy(a => a.SortOrder).ToList();
结果如下:
[
{
"SortOrder": null
},
{
"SortOrder" : 2
}
]
但这是我想要的,我不知道如何实现它:
[
{
"SortOrder": 2
},
{
"SortOrder" : null
}
]
答:
1赞
Vivek Nuna
7/15/2023
#1
您可以使用如下所示的技巧来执行此操作。
List<MyEntity> myList = new List<MyEntity>
{
new MyEntity { SortOrder = 2 },
new MyEntity { SortOrder = null },
new MyEntity { SortOrder = 1 },
};
List<MyEntity> sortedList = myList.OrderBy(e => e.SortOrder ?? int.MaxValue).ToList();
评论
0赞
Alireza Ahmadi
7/15/2023
哦,这当然有效,非常感谢伙计
0赞
Alireza Ahmadi
7/15/2023
我做到了,网站一开始不让我做
1赞
Charlieface
7/16/2023
#2
虽然@VivekNuna的答案有效并且可能是最简单的,但更惯用的方法是使用自定义比较器。
var comparer = Comparer<YourMapClass>.Create((a, b) =>
a.SortOrder.HasValue
? b.SortOrder.HasValue
? a.SortOrder.Value.CompareTo(b.SortOrder.Value)
: -1
: 1
);
myList
.Select(Map)
.Order(comparer)
.ToList();
或者对同一列表进行排序
myList.Sort(comparer);
您也可以为int?
var comparer = Comparer<int?>.Create((a, b) =>
a.HasValue
? b.HasValue
? a.Value.CompareTo(b.Value)
: -1
: 1
);
并做
myList
.Select(Map)
.OrderBy(e => e.SortOrder, comparer)
.ToList();
评论
0赞
Alireza Ahmadi
7/25/2023
感谢这些东西很酷
评论