Linq to SQL - 分组和计数

Posted

技术标签:

【中文标题】Linq to SQL - 分组和计数【英文标题】:Linq to SQL - Group By and Count 【发布时间】:2013-07-19 10:15:48 【问题描述】:

我正在尝试转换此查询(已经可以使用)

SELECT Building.NAME, COUNT([User].ID)
FROM BuildingUser
INNER JOIN Building ON Building.ID = BuildingUser.ID_BUILDING
INNER JOIN [User] ON [User].ID = BuildingUser.ID_USER
GROUP BY Building.NAME

到 Linq to SQL,但我不知道我做错了什么。看看我的努力

from buildinguser in db.GetTable<BuildingUser>()
join building in db.GetTable<Building>()
on buildinguser.ID_BUILDING equals building.ID
join user in db.GetTable<User>()
on buildinguser.ID_USER equals user.ID
group building by building.NAME into grpBuilding
select new

    building = grpBuilding.Key,
    users = 
;

我只需要将我的建筑物分组并计算每个建筑物有多少用户。

【问题讨论】:

【参考方案1】:

只需使用Count 方法:

from buildinguser in db.GetTable<BuildingUser>()
join building in db.GetTable<Building>()
on buildinguser.ID_BUILDING equals building.ID
join user in db.GetTable<User>()
on buildinguser.ID_USER equals user.ID
group building by building.NAME into grpBuilding
select new

    building = grpBuilding.Key,
    users = grpBuilding.Count()
;

【讨论】:

这是正确的。您指望该特定列的事实是任意的。您没有使用 distinct 或任何东西,所以这只是选择一列并根据分组对其进行计数。 知道这是否会抵消数据库引擎的计数,还是在代码中完成计数? @Luke 假设from/join 部分中的每个集合都是IQueryable&lt;&gt;,这将在SQL 中转换为COUNT() / GROUP BY。如果你有一个IEnumerable&lt;&gt;,它很可能会在内存中发生。 @p.s.w.g 感谢您的澄清。我认为它对其他人也有用。

以上是关于Linq to SQL - 分组和计数的主要内容,如果未能解决你的问题,请参考以下文章

Linq to SQL:如何在没有分组的情况下进行聚合?

具有多重嵌套表的分组方式和计数作为 LINQ 查询

如何使用linq计数和分组

Linq 高级分组 + 计数到新模型

Linq 按连接表中的项目计数分组

使用Linq to Entities在一个请求中选择计数和计数