LINQ QUERY TABLE



当工作人员查看某些内容时,数据库中的数字会增加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

我希望每个名字都出现一次。谢谢

您需要使用GroupBy,然后:

IEnumerable<string> query = _viewHistoryRepository
.GroupBy(x => x.MemberId)
.Select(g => $"{g.Key} : {g.Sum(x => x.ViewsCount)}");

所以显然你有一个类似的类:

class StaffMemberView
{
public string Name {get; set;}
public int ViewCount {get; set;}   // in your input always 1
... // other properties
}

如果您的输入确实总是具有值1,那么就足以使StaffMemberview组具有与属性Name相同的值。在参数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的值求和。

参数结果选择器更改:

(name, staffMembersViewsWithThisName) => new 
{
Name = name,
ViewCount = staffMemberViewsWithThisName
.Select(staffMemberView => staffMemberView.ViewCount)
.Sum(),
});

最新更新