Linq在C#中按2列分组[重复]

Posted

技术标签:

【中文标题】Linq在C#中按2列分组[重复]【英文标题】:Linq to group by 2 columns in C# [duplicate] 【发布时间】:2013-05-28 11:42:14 【问题描述】:

我有一个简单的 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

如何将查询更改为具有附加列“状态”,以便它返回:

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()
        );

...但这不会编译。

谢谢你,马克

【问题讨论】:

【参考方案1】:

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

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

用对应的select:

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

【讨论】:

【参考方案2】:

您需要在分组中创建新的匿名类型,这应该可以解决问题。

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()
    );

【讨论】:

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

以上是关于Linq在C#中按2列分组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中按 2 列和 Max() 其他列分组

如何在 LINQ C# 中仅过滤 2 列分组中的最后一个值

在 LINQ 中按 2 个属性分组

在熊猫中按多个条件分组[重复]

LINQ:在日期时间字段中按月和年分组

在mysql中按2字段分组[重复]