Sai*_*udo 9 c# linq entity-framework
我有一个看起来像这样的实体:
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; }
}
Run Code Online (Sandbox Code Playgroud)
一小部分数据样本:
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
Run Code Online (Sandbox Code Playgroud)
最终我试图获得一个层级列表的结果,层级内是一个类列表,并且在类中是TankName与战斗和胜利之和的独特分组.
是否可以在单个LINQ语句中完成所有这些操作?或者还有另一种方法可以轻松获得结果吗?(我知道我可以轻松遍历DbSet几次以生成我想要的列表;我希望有一种更有效的方法来获得与LINQ相同的结果.)
The*_*ebo 10
这应该这样做:
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
};
Run Code Online (Sandbox Code Playgroud)
您也可以使用Method语法.这应该与@TheEvilGreebo相同
var result = memberTanks.GroupBy(x => new {x.Tier, x.Class, x.TankName})
.Select(g => new { g.Key.Tier,
g.Key.Class,
g.Key.TankName,
Fights = g.Sum(mt => mt.Battles),
Wins = g.Sum(mt=> mt.Victories)
});
Run Code Online (Sandbox Code Playgroud)
您使用哪种语法归结为首选.删除.Select以返回IGrouping,这将使您能够枚举组
var result = memberTanks.GroupBy(x => new {x.Tier, x.Class, x.TankName})
Run Code Online (Sandbox Code Playgroud)