我有一个看起来像这样的实体:
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 };