Linq在C#中按2列分组

Mar*_*ark 3 c# linq linq-to-sql

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

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

哪个回报:

Team  Number
ta    100 
tb    98 
tc    123
Run Code Online (Sandbox Code Playgroud)

如何将查询更改为具有附加列"status",以便它返回:

Team  Number Status
ta    40     Open
ta    60     Closed
tb    58     Open
tb    40     Closed
tc    1      Open
tc    122    Closed
Run Code Online (Sandbox Code Playgroud)

我尝试添加另一组:

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

......但那不会编译.

谢谢,马克

And*_*mar 10

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

.GroupBy(x => new { x.team, x.status })
Run Code Online (Sandbox Code Playgroud)

用相应的选择:

.Select(call => new
    {
        Team = call.Key.team,
        Status = call.Key.status,
        Number = call.Count()
    });
Run Code Online (Sandbox Code Playgroud)


Jar*_*rek 8

你需要在灌浆中创建新的匿名类型,这应该可以解决问题.

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()
    });
Run Code Online (Sandbox Code Playgroud)

  • 你的语法错了.那应该是`Team = call.Key.Team`和`Status = call.Key.Status`(`Key2`不存在,`Key`将是groupby中创建的匿名类型) (2认同)