随着工作人员对某件事的看法,数据库中的数目增加了1。示例
abab : 1
cbcb : 1
dcdc: 1
abab : 1
abab : 1我想打印谁在桌子上看了多少钱。示例
abab : 3
cbcb : 1
dcdc : 1但这不像我想的那样。我编写的代码如下
Count = _viewHistoryRepository.GetByExpression(f => f.MemberId == c.MemberId).Sum(s=> s.ViewsCount)输出:
abab : 3
abab : 3
abab : 3
cbcb : 1
dcdc: 1我希望每个名字都出现一次。谢谢
发布于 2021-12-06 20:42:15
那么,您需要使用GroupBy:
IEnumerable<string> query = _viewHistoryRepository
.GroupBy(x => x.MemberId)
.Select(g => $"{g.Key} : {g.Sum(x => x.ViewsCount)}");发布于 2021-12-06 21:00:15
很明显,你有一个类似于此的类:
class StaffMemberView
{
public string Name {get; set;}
public int ViewCount {get; set;} // in your input always 1
... // other properties
}如果您的输入始终具有值1,那么就足以使属性名称具有相同值的StaffMemberviews组。在参数resultSelector中,计算每个组中的元素数:
IEnumerable<StaffMemberView> staffMemberViews = ...
var result = staffMemberViews.GroupBy(
// keySelector: make groups with the same value for Name:
staffMemberView => staffMemberView.Name,
// parameter resultSelector, for every Name, and all StaffMemberViews that
// have this Name, make one new:
(name, staffMembersViewsWithThisName) => new
{
Name = name,
ViewCount = staffMemberViewsWithThisName.Count(),
});如果参数ViewCount有时不是1,那么只计算每个组中的StaffMemberViews是不够的,但是您必须对ViewCount的值进行求和。
参数resultSelector更改:
(name, staffMembersViewsWithThisName) => new
{
Name = name,
ViewCount = staffMemberViewsWithThisName
.Select(staffMemberView => staffMemberView.ViewCount)
.Sum(),
});https://stackoverflow.com/questions/70251655
复制相似问题