using System;
using System.Globalization;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
public class Test
{
class grpitem
{
public int groupCode;
public string item;
}
static List<grpitem> list = new List<grpitem>()
{
new grpitem() {groupCode=3, item="b"},
new grpitem() {groupCode=1, item="b"},
new grpitem() {groupCode=3, item="c"},
new grpitem() {groupCode=2, item="b"},
new grpitem() {groupCode=2, item="a"},
new grpitem() {groupCode=2, item="c"},
new grpitem() {groupCode=1, item="a"},
new grpitem() {groupCode=3, item="a"},
new grpitem() {groupCode=3, item="d"}
};
public static void Main()
{
IEnumerable<grpitem> ordered = list.OrderBy(grp => grp.groupCode).GroupBy(grp => grp.groupCode)
.SelectMany(g => g.OrderBy(grp => grp.item));
foreach(grpitem g in ordered)
Console.WriteLine("groupCode:{0} item:{1}",g.groupCode,g.item);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CgkJY2xhc3MgZ3JwaXRlbQoJICAgIHsKCSAgICAgICAgcHVibGljIGludCBncm91cENvZGU7CgkgICAgICAgIHB1YmxpYyBzdHJpbmcgaXRlbTsKCSAgICB9CiAgICAgICAgCiAgICAgICAgc3RhdGljIExpc3Q8Z3JwaXRlbT4gbGlzdCA9IG5ldyBMaXN0PGdycGl0ZW0+KCkKICAgICAgICB7CiAgICAgICAgICAgICBuZXcgZ3JwaXRlbSgpIHtncm91cENvZGU9MywgaXRlbT0iYiJ9LAogICAgICAgICAgICAgbmV3IGdycGl0ZW0oKSB7Z3JvdXBDb2RlPTEsIGl0ZW09ImIifSwKICAgICAgICAgICAgIG5ldyBncnBpdGVtKCkge2dyb3VwQ29kZT0zLCBpdGVtPSJjIn0sCiAgICAgICAgICAgICBuZXcgZ3JwaXRlbSgpIHtncm91cENvZGU9MiwgaXRlbT0iYiJ9LAogICAgICAgICAgICAgbmV3IGdycGl0ZW0oKSB7Z3JvdXBDb2RlPTIsIGl0ZW09ImEifSwKICAgICAgICAgICAgIG5ldyBncnBpdGVtKCkge2dyb3VwQ29kZT0yLCBpdGVtPSJjIn0sCiAgICAgICAgICAgICBuZXcgZ3JwaXRlbSgpIHtncm91cENvZGU9MSwgaXRlbT0iYSJ9LAogICAgICAgICAgICAgbmV3IGdycGl0ZW0oKSB7Z3JvdXBDb2RlPTMsIGl0ZW09ImEifSwKICAgICAgICAgICAgIG5ldyBncnBpdGVtKCkge2dyb3VwQ29kZT0zLCBpdGVtPSJkIn0KICAgICAgICB9OwogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIElFbnVtZXJhYmxlPGdycGl0ZW0+IG9yZGVyZWQgPSBsaXN0Lk9yZGVyQnkoZ3JwID0+IGdycC5ncm91cENvZGUpLkdyb3VwQnkoZ3JwID0+IGdycC5ncm91cENvZGUpCiAgICAgICAgICAgICAgICAuU2VsZWN0TWFueShnID0+IGcuT3JkZXJCeShncnAgPT4gZ3JwLml0ZW0pKTsKCQoJICAgICAgICBmb3JlYWNoKGdycGl0ZW0gZyBpbiBvcmRlcmVkKQoJICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoImdyb3VwQ29kZTp7MH0gaXRlbTp7MX0iLGcuZ3JvdXBDb2RlLGcuaXRlbSk7CiAgICAgCn0KfQo=