C#中的Linq如何按照2个列进行分组?

4

我有一个简单的Linq查询,它按一个字段Team进行分组:

var qbt = db.Calls.GroupBy(x => x.team).Select(call => new
        {
            Team = call.Key,
            Number=call.Count()
        });

这将返回:

Team  Number
ta    100 
tb    98 
tc    123

我该如何更改查询以添加一个名为“status”的列,以便返回以下结果:

Team  Number Status
ta    40     Open
ta    60     Closed
tb    58     Open
tb    40     Closed
tc    1      Open
tc    122    Closed

我尝试添加另一个组:

var qbt = db.Calls.GroupBy(x => x.team).GroupBy(y => y.status).Select(call => new
        {
            Team = call.Key,
            Status = call.Key2,
            Number=call.Count()
        });

... 但是那个无法编译。

谢谢,马克

2个回答

11

你可以对匿名类型进行分组:

.GroupBy(x => new { x.team, x.status })

使用相应的选项:

.Select(call => new
    {
        Team = call.Key.team,
        Status = call.Key.status,
        Number = call.Count()
    });

11
您需要在分组内创建新的匿名类型,这样应该就可以解决问题了。
var qbt = db.Calls
    .GroupBy(x => new { Team = x.team, Status = x.status })
    .Select(call => new
    {
        Team = call.Key.Team,
        Status = call.Key.Status,
        Number=call.Count()
    });

2
你的语法有误。应该是 Team = call.Key.TeamStatus = call.Key.StatusKey2 不存在,而 Key 将是在 groupby 中创建的匿名类型)。 - Jamiec
1
没错 - 我甚至没有注意到那部分,因为它是从问题中复制粘贴的;不过最重要的部分似乎都没问题。谢谢。 - Jarek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接