林克算麻烦

时间:2011-10-17 20:51:10

标签: c# asp.net linq count group-by

我有两张桌子:

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

1 个答案:

答案 0 :(得分:3)

鉴于徽章确实有徽章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
    }
}