我是LINQ的新手,所以对我来说似乎很复杂。
我在数据库中有这个表:
我使用LINQ to Entity获取表记录:
var inspectionsData = context.Set<inspectionsData>().ToList();
现在我需要制定一些逻辑来使inspectionsData看起来像这样:
正如您可以看到行,其中Cities和Authority相同,我希望它们在一行中包含总计项目。 如何在c#中使用linq进行这些更改?
答案 0 :(得分:6)
使用GroupBy
语句执行此操作,然后使用Select
投影到新对象。
var result = context.Set<inspectionsData>()
.GroupBy(d => new {d.City, d.Authority})
.Select(g => new {g.Key.City, g.Key.Authority, Items = g.Sum(x => x.Items)})
.ToList();
使用匿名对象作为响应,但由于您的响应实际上与初始对象具有相同的形状,您还可以投射回inspectionsData
:
var result = context.Set<inspectionsData>()
.GroupBy(d => new {d.City, d.Authority})
.Select(g => new inspectionsData{
City = g.Key.City,
Authority = g.Key.Authority,
Items = g.Sum(x => x.Items)})
.ToList();