【问题标题】:Linq to group by 2 columns in C# [duplicate]Linq在C#中按2列分组[重复]
【发布时间】: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()
        });

...但这不会编译。

谢谢你,马克

【问题讨论】:

    标签: c# linq linq-to-sql


    【解决方案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 中创建的匿名类型)
      • 对 - 甚至没有注意到那部分,因为它是从问题中复制粘贴的;虽然最重要的部分似乎没问题。谢谢。
      猜你喜欢
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 2023-03-21
      相关资源
      最近更新 更多