c# - Linq 计数麻烦

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

最佳答案

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

关于c# - Linq 计数麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7799416/

相关文章:

c# - "right"是什么方法可以在事件发生后将 C# 中的方法运行延迟一段时间,同时仍让原始线程运行?

c# - 使用 Bootstrap 显示 MVC 表单的正确方法

c# - 运行时错误:LINQ to Entities无法识别“User.IsInRole()”上的方法

c# - .NET MVC 脚本反复用于删除 SQL Server 数据库以防止数据库连接

asp.net - 如何向 ASP.NET 中的文件发送电子邮件?

LINQ 分组/子查询来填充层次结构数据结构

c# - 如何处理旋转 POCO?

c# - 自然加入.net

C# 防止在尝试打印文档时出现 Adob​​e Reader 窗口

c# - 使用javascript停止按钮OnClick事件