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

前端之家收集整理的这篇文章主要介绍了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
                        };

猜你在找的C#相关文章