所以我想要使用自定义要求订购IEnumerable。基本上我希望通过DocumentId订购它,但我有点挑剔/具体,所以我需要它们这样订购..
1st = ID 3
2nd = ID 5
3rd = ID 2
4th = ID 4
5th = ID 6
这是因为这些ID与预定图像匹配,图像需要按此顺序显示。
任何人都想到这样做的方法。
答案 0 :(得分:8)
您可以使用以下方法。
int[] orderedIds = { 3, 5, 2, 4, 6 }
var result = enumerable.OrderBy(x => Array.IndexOf(orderedIds, x.Id));
这假设所有orderedIds
都包含所有可能的ID。如果不是这种情况,这种方法会在所有其他项之前对具有未知ID的项进行排序。很可能这不是你想要的,所以在这种情况下,你可能想要使用这样的东西:
var result =
enumerable.Select(x => new { Item = x,
Index = Array.IndexOf(orderedIds, x.Id) })
.OrderByDescending(x => x.Index != -1)
.ThenBy(x => x.Index == -1 ? x.Item.Id : x.Index)
.Select(x => x.Item);
这会将具有未知ID的项目放在结果的末尾,并按ID对其进行排序。