我有一个DataTable具有以下结构和数据的:
id | 仪器 名称
------------------------
1 | 吉他| 约翰
2 | 吉他| 乔治
3 | 吉他| 保罗
4 | 鼓| 林戈
5 | 鼓| 皮特
我可以这样检索记录:
IEnumerable <Beatle>...
class Beatle
{
int id;
string inst;
string name;
}
我想获得演奏不同乐器的人的内部秩序。在MSSQL中,我会使用
SELECT
*
,Row_Number() OVER (PARTITION BY inst ORDER BY id) AS rn
FROM Beatles
该查询返回
id | 仪器 名称| rn
-----------------------------
1 | 吉他| 约翰| 1个
2 | 吉他| 乔治| 2
3 | 吉他| 保罗| 3
4 | 鼓| 铃声 1个
5 | 鼓| 皮特| 2
我如何在Linq中做到这一点?
编辑(接受答案后)
完整的工作代码:
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 o = beatles.OrderBy(x => x.id).GroupBy(x => x.inst)
.Select(g => new { g, count = g.Count() })
.SelectMany(t => t.g.Select(b => b)
.Zip(Enumerable.Range(1, t.count), (j, i) => new { j.inst, j.name, rn = i }));
foreach (var i in o)
{
Console.WriteLine("{0} {1} {2}", i.inst, i.name, i.rn);
}
慕尼黑8549860
慕哥9229398
相关分类