using System;
using System.Linq;
public class Test
{
public static void Main()
{
var beatles = (new[]
{
new {id = 1, inst = "guitar", name = "john"},
new {id = 2, inst = "guitar", name = "george"},
new {id = 3, inst = "guitar", name = "paul"},
new {id = 4, inst = "drums", name = "ringo"},
new {id = 5, inst = "drums", name = "pete"}
});
var result = beatles
.GroupBy(g => g.inst)
.Select(c => c.OrderBy(o => o.id).Select((v, i) => new { i, v }).ToList())
.SelectMany(c => c)
.Select(c => new { c.v.id, c.v.inst, c.v.name, rn = c.i + 1 })
.ToList();
Console.WriteLine("id | inst \t| name \t| rn");
foreach (var row in result)
{
Console.WriteLine($"{row.id} | {row.inst}\t| {row.name} \t| {row.rn}");
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgYmVhdGxlcyA9IChuZXdbXQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuZXcge2lkID0gMSwgaW5zdCA9ICJndWl0YXIiLCBuYW1lID0gImpvaG4ifSwKICAgICAgICAgICAgICAgIG5ldyB7aWQgPSAyLCBpbnN0ID0gImd1aXRhciIsIG5hbWUgPSAiZ2VvcmdlIn0sCiAgICAgICAgICAgICAgICBuZXcge2lkID0gMywgaW5zdCA9ICJndWl0YXIiLCBuYW1lID0gInBhdWwifSwKICAgICAgICAgICAgICAgIG5ldyB7aWQgPSA0LCBpbnN0ID0gImRydW1zIiwgbmFtZSA9ICJyaW5nbyJ9LAogICAgICAgICAgICAgICAgbmV3IHtpZCA9IDUsIGluc3QgPSAiZHJ1bXMiLCBuYW1lID0gInBldGUifQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiZWF0bGVzCiAgICAgICAgICAgICAgICAuR3JvdXBCeShnID0+IGcuaW5zdCkKICAgICAgICAgICAgICAgIC5TZWxlY3QoYyA9PiBjLk9yZGVyQnkobyA9PiBvLmlkKS5TZWxlY3QoKHYsIGkpID0+IG5ldyB7IGksIHYgfSkuVG9MaXN0KCkpCiAgICAgICAgICAgICAgICAuU2VsZWN0TWFueShjID0+IGMpCiAgICAgICAgICAgICAgICAuU2VsZWN0KGMgPT4gbmV3IHsgYy52LmlkLCBjLnYuaW5zdCwgYy52Lm5hbWUsIHJuID0gYy5pICsgMSB9KQogICAgICAgICAgICAgICAgLlRvTGlzdCgpOwoKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoImlkIHwgaW5zdCBcdHwgbmFtZSAgXHR8IHJuIik7CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciByb3cgaW4gcmVzdWx0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIntyb3cuaWR9ICB8IHtyb3cuaW5zdH1cdHwge3Jvdy5uYW1lfSAgXHR8IHtyb3cucm59Iik7CiAgICAgICAgICAgIH0gICAgIAoJfQp9