如何使用LINQ在组内进行排序

hau*_*ous 13 .net c# linq .net-3.5

是否有可能(最好使用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"}
        };
Run Code Online (Sandbox Code Playgroud)

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

             {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"},
Run Code Online (Sandbox Code Playgroud)

该集合可以同样到达groupCode顺序"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);
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误 - "至少有一个对象必须IComparable",这让我很困惑.

最后,这必须是.Net3.5中的C#,不能迟到.

Tim*_*ter 22

var ordered = list.GroupBy(grp => grp.groupCode)
   .SelectMany(g => g.OrderBy(grp => grp.item));
Run Code Online (Sandbox Code Playgroud)

这是一个demo乱码样本数据.