在linq结果中包括count = 0

Han*_*ady 5 c# linq count

我有一张桌子TeamNameCurrentStatus田地.我正在制作一个linq查询来获取每个团队以及每个状态的记录数:

var teamStatusCounts = models.GroupBy(x => new { x.CurrentStatus, x.TeamName })
                             .Select(g => new { g.Key, Count = g.Count() });
Run Code Online (Sandbox Code Playgroud)

此查询的结果返回除count为0之外的所有计数.我需要获取没有特定团队记录和特定状态(其中count = 0)的行.

kon*_*ked 2

您可以为您期望的团队名称和状态建立一个单独的集合,并将缺少的添加到结果集中

//assuming allTeamNamesAndStatuses is a cross joing of all 'CurrentStatus' and 'TeamNames'
var teamStatusCounts = models.GroupBy(x => new { x.CurrentStatus, x.TeamName })
                             .Select(g => new { g.Key, Count = g.Count() })
                             .ToList();

var missingTeamsAndStatuses = allTeamNamesAndStatuses
                   .Where(a=>
                      !teamStatusCounts.Any(b=>
                          b.Key.CurrentStatus == a.CurrentStatus 
                          && b.Key.TeamName == a.TeamName))
                   .Select(a=>new { 
                        Key = new {  a.CurrentStatus, a.TeamName  }, 
                        Count = 0 
                   });

teamStatusCounts.AddRange(emptyGroups);
Run Code Online (Sandbox Code Playgroud)

我也创建了一个小提琴来演示答案