2011-10-17 112 views
2

我有两个表:LINQ的数麻烦

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

回答

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

超级感谢一如既往! :d –