C# · 12月 28, 2021

c# – 如何使用多个GroupBys构建LINQ?

我有一个看起来像这样的实体: public partial class MemberTank{ public int Id { get; set; } public int AccountId { get; set; } public int Tier { get; set; } public string Class { get; set; } public string TankName { get; set; } public int Battles { get; set; } public int Victories { get; set; } public System.DateTime LastUpdated { get; set; }}

数据的一个小样本:

Id AccountId Tier Class TankName Battles Victories — ——— —- —– ——— ——- ———- 1 432423 5 Heavy KV 105 58 2 432423 6 Heavy IS 70 39 3 544327 5 Heavy KV 200 102 4 325432 7 Medium KV-13 154 110 5 432423 7 Medium KV-13 191 101

最终我试图得到一个层次列表的结果,层级是类的列表,在班级内是TankName与战斗和胜利之和的独特组合.

在单个LINQ语句中可以做到这一切吗?还是有另一种方式轻松获得结果? (我知道我可以轻松地循环遍历DbSet几次,以产生我想要的列表;我希望有一个更有效的方式获得与LINQ相同的结果.)

解决方法 这应该做到: var output = from mt in MemberTanks group by {mt.Tier,mt.Class,mt.TankName} into g select new { g.Key.Tier,g.Key.Class,g.Key.TankName,fights = g.Sum(mt => mt.Battles),Wins = g.Sum(mt=> mt.Victories };