1

所以我想使用自定义要求订购一个 IEnumerable。基本上我希望通过 DocumentId 订购它,但我有点挑剔/具体,所以我需要像这样订购它们..

1st = ID 3
2nd = ID 5
3rd = ID 2
4th = ID 4
5th = ID 6

这是因为这些 ID 与预定义图像匹配,并且图像需要按此顺序显示。

请任何人想办法做到这一点。

4

1 回答 1

8

您可以使用以下方法。

int[] orderedIds = { 3, 5, 2, 4, 6 }
var result = enumerable.OrderBy(x => Array.IndexOf(orderedIds, x.Id));

这假定 allorderedIds包含所有可能的 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 对它们进行排序。

于 2013-07-16T08:32:25.660 回答