2013-07-20 45 views
4

我想這個查詢轉換(已工作)LINQ到SQL - GROUP BY和計數

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到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 = 
}; 

我只需要對我的建築物進行分組並統計每個人有多少用戶。

回答

9

只需使用的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() 
}; 
+2

這是正確的。您指向特定列的事實是任意的。你沒有使用獨特的或任何東西,所以這只是選擇一個專欄,並根據分組進行計數。 –

+0

任何想法是否將計數偏移到數據庫引擎,還是在代碼中完成計數? – Luke

+1

@Luke假設'from' /'join'節中的每個集合都是'IQueryable <>',這將轉換爲SQL中的COUNT()/ GROUP BY'。如果你有一個'IEnumerable <>',它可能會在內存中發生。 –