如何使用 LINQ 在组内排序

本文关键字:内排序 LINQ 何使用 | 更新日期: 2023-09-27 18:32:12

是否可以

(最好使用 LINQ)在组本身内对具有自然分组的集合进行排序,而不会破坏组顺序?

让我解释一下。我有一个收藏,因此:

        List<grpitem> list = new List<grpitem>()
        {
             new grpitem() {groupCode="1", item="a"},
             new grpitem() {groupCode="1", item="b"},
             new grpitem() {groupCode="1", item="c"},
             new grpitem() {groupCode="2", item="a"},
             new grpitem() {groupCode="2", item="c"},
             new grpitem() {groupCode="2", item="b"},
             new grpitem() {groupCode="3", item="c"},
             new grpitem() {groupCode="3", item="b"},
             new grpitem() {groupCode="3", item="a"}
        };
到达的顺序

(组码的顺序)在别处确定。我需要重新排列集合,以便在每个组中,元素按项目值排序,即:

             {groupCode="1", item="a"},
             {groupCode="1", item="b"},
             {groupCode="1", item="c"},
             {groupCode="2", item="a"},
             {groupCode="2", item="b"},
             {groupCode="2", item="c"},
             {groupCode="3", item="a"},
             {groupCode="3", item="b"},
             {groupCode="3", item="c"},

集合可以同样以组码顺序"2"、"3"、"1"或其他顺序到达。我不能打扰这一点 - 我只需要对每个组中的元素重新排序。

LINQ 查询将非常整洁!(我可能很暗淡,但我还没有找到)

我试过这个:

        var reOrdered = (from x in list
                          group x by x.groupCode into groups
                          select groups)
                         .OrderBy(i => from j in i select j.item)
                         .SelectMany(i => i);

但是我得到一个错误 - "至少有一个对象必须可比",这让我感到困惑。

最后,这必须是 中的 C#。Net3.5,以后没有。

如何使用 LINQ 在组内排序

var ordered = list.GroupBy(grp => grp.groupCode)
   .SelectMany(g => g.OrderBy(grp => grp.item));

下面是一个包含乱码示例数据的演示。