C# Linq计数故障

C# Linq计数故障,c#,asp.net,linq,count,group-by,C#,Asp.net,Linq,Count,Group By,我有两张桌子: tblBadge ------- ID Name tblBadgeUsers ------- BadgeID UserID 一个用户可以有许多徽章,所有关系都在SQL数据库中正确设置 我试图返回一个用户拥有的所有徽章的列表,以及这些徽章的总数。这是我能做的,我很困惑。我想返回tblBadge数据以及一个额外的列,显示授予该徽章的总数 这不起作用,但这是我的尝试: var q = db.tblBadgeUsers .Where(c => c.UserID == U

我有两张桌子:

tblBadge
-------
ID
Name

tblBadgeUsers
-------
BadgeID
UserID
一个用户可以有许多徽章,所有关系都在SQL数据库中正确设置

我试图返回一个用户拥有的所有徽章的列表,以及这些徽章的总数。这是我能做的,我很困惑。我想返回tblBadge数据以及一个额外的列,显示授予该徽章的总数

这不起作用,但这是我的尝试:

var q = db.tblBadgeUsers
    .Where(c => c.UserID == UserID)
    .GroupBy(c => c.BadgeID)
    .Select(c => new { BadgeCount = c.Count(), Record = c.tblBadge });
考虑到一个徽章实际上只有一个徽章ID和一个用户,听起来你只需要获取徽章ID和徽章的使用计数,这意味着只需要获取组的密钥:

var q = db.tblBadgeUsers
    .Where(c => c.UserID == UserID)
    .GroupBy(c => c.BadgeID)
    .Select(c => new { BadgeCount = c.Count(), BadgeId = c.Key });
如果每个徽章上都有更多信息,您可能需要执行以下操作:

var q = db.tblBadgeUsers
    .Where(c => c.UserID == UserID)
    .GroupBy(c => c.BadgeID)
    .Select(c => new { BadgeCount = c.Count(), BadgeId = c.Key, Badges = c });
然后你可以做:

foreach (var badgeType in q)
{
    Console.WriteLine("{0}: {1}", badgeType.BadgeId, badgeType.BadgeCount);
    foreach (var badge in q.Badges)
    {
        // Deal with the badge information
    }
}