【问题标题】:Linq to SQL - Group By and CountLinq to SQL - 分组和计数
【发布时间】: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 = 
};

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

【问题讨论】:

    标签: c# sql linq c#-4.0 linq-to-sql


    【解决方案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 感谢您的澄清。我认为它对其他人也有用。
    猜你喜欢
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多