首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ查询表

LINQ查询表
EN

Stack Overflow用户
提问于 2021-12-06 20:37:29
回答 2查看 58关注 0票数 0

随着工作人员对某件事的看法,数据库中的数目增加了1。示例

代码语言:javascript
复制
abab : 1
cbcb : 1
dcdc: 1
abab : 1
abab : 1

我想打印谁在桌子上看了多少钱。示例

代码语言:javascript
复制
abab : 3
cbcb : 1
dcdc : 1

但这不像我想的那样。我编写的代码如下

代码语言:javascript
复制
Count = _viewHistoryRepository.GetByExpression(f => f.MemberId == c.MemberId).Sum(s=> s.ViewsCount)

输出:

代码语言:javascript
复制
abab : 3
abab : 3
abab : 3
cbcb : 1
dcdc: 1

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

EN

回答 2

Stack Overflow用户

发布于 2021-12-06 20:42:15

那么,您需要使用GroupBy

代码语言:javascript
复制
IEnumerable<string> query = _viewHistoryRepository
    .GroupBy(x => x.MemberId)
    .Select(g => $"{g.Key} : {g.Sum(x => x.ViewsCount)}");
票数 1
EN

Stack Overflow用户

发布于 2021-12-06 21:00:15

很明显,你有一个类似于此的类:

代码语言:javascript
复制
class StaffMemberView
{
    public string Name {get; set;}
    public int ViewCount {get; set;}   // in your input always 1
    ... // other properties
}

如果您的输入始终具有值1,那么就足以使属性名称具有相同值的StaffMemberviews组。在参数resultSelector中,计算每个组中的元素数:

代码语言:javascript
复制
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更改:

代码语言:javascript
复制
(name, staffMembersViewsWithThisName) => new 
{
    Name = name,
    ViewCount = staffMemberViewsWithThisName
                .Select(staffMemberView => staffMemberView.ViewCount)
                .Sum(),
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70251655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档