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<>
,这将在SQL 中转换为COUNT() / GROUP BY
。如果你有一个IEnumerable<>
,它很可能会在内存中发生。
@p.s.w.g 感谢您的澄清。我认为它对其他人也有用。以上是关于Linq to SQL - 分组和计数的主要内容,如果未能解决你的问题,请参考以下文章