Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中转换表以在Linq中添加更多列_C#_Linq_Linq To Sql - Fatal编程技术网

C# 在C中转换表以在Linq中添加更多列

C# 在C中转换表以在Linq中添加更多列,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我在前一篇文章中收到了非常有用的建议:-我现在正在尝试扩展这一点,以便我的ViewModel与视图的外观保持一致: 我的第一个问题是: var qbt = db.Calls.GroupBy(calls => new { calls.assignedteam, calls.status }) .Select(call => new StatusByTeamViewModel1 { Team = call.Key.assig

我在前一篇文章中收到了非常有用的建议:-我现在正在尝试扩展这一点,以便我的ViewModel与视图的外观保持一致:

我的第一个问题是:

var qbt = db.Calls.GroupBy(calls => new { calls.assignedteam, calls.status })
            .Select(call => new StatusByTeamViewModel1
        {
            Team = call.Key.assignedteam,
            Status = call.Key.status,
            Number = call.Count()
        }).OrderBy(z => z.Team).ThenBy(z => z.Status);
返回:

Team  Number Status
ta    40     Open
ta    60     Closed
tb    58     Open
tb    40     Closed
tc    1      Open
tc    122    Closed
我想把那张桌子换成:

Team Open Closed
ta   40   60
tb   58   40
tc   1    122
我尝试了下面的查询,但我把自己搞混了-如果打开/关闭列中的每一个团队只显示1或0:

        var qbt2 = qbt.GroupBy(x => x.Team)
          .Select(call => new StatusByTeamAllViewModel2
          {
              Team = call.Key,
              Open = qbt2.Where(it => it.Status == "Open" && it.Team==call.Key).Count(),
              Closed = qbt2.Where(it => it.Status == "Closed" && it.Team == call.Key).Count(),

          });
我也尝试在LinqPad,但也很难让它在LinqPad工作

谢谢你的帮助


标记这里的内容甚至不会编译,因为您在左侧定义qbt2,在右侧使用它。现在,假设您指的是右侧的qbt,那么GroupBy的实现效率相当低,然后遍历整个序列寻找匹配的键。GroupBy已经为您提供了所需的序列元素,所以请使用它。然后,排除这两个错误,您将计算与给定团队、状态对匹配的行数,而不是对给定对的数值求和。因此:

var qbt2 = 
    qbt.GroupBy(x => x.Team)
       .Select(g => new StatusByTeamAllViewModel2 {
           Team = g.Key,
           Open = g.Where(x => x.Status == "Open").Sum(x => x.Number)
           Closed = g.Where(x => x.Status == "Closed").Sum(x => x.Number)
       });

这里的内容甚至不会编译,因为您在左侧定义qbt2,在右侧使用它。现在,假设您指的是右侧的qbt,那么GroupBy的实现效率相当低,然后遍历整个序列寻找匹配的键。GroupBy已经为您提供了所需的序列元素,所以请使用它。然后,排除这两个错误,您将计算与给定团队、状态对匹配的行数,而不是对给定对的数值求和。因此:

var qbt2 = 
    qbt.GroupBy(x => x.Team)
       .Select(g => new StatusByTeamAllViewModel2 {
           Team = g.Key,
           Open = g.Where(x => x.Status == "Open").Sum(x => x.Number)
           Closed = g.Where(x => x.Status == "Closed").Sum(x => x.Number)
       });