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));

orderedIdsこれは、可能なすべての IDが all に含まれていることを前提としています。そうでない場合、この方法では 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 に答える