加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:47:47 所属栏目:百科 来源:网络整理
导读:我有一个看起来像这样的实体: 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 Ba
我有一个看起来像这样的实体:
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
                        };

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读