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