6
mam ta kwerenda działa idealnie:LINQ do SQL Left Join, Porządek i Grupa hrabia
SELECT B.ID, B.NAME, COUNT(BU.ID) AS TOTAL
FROM Building B
LEFT JOIN BuildingUser BU ON BU.ID_BUILDING = B.ID
GROUP BY B.ID, B.NAME
ORDER BY COUNT(BU.ID) DESC, B.NAME
jednak nie jestem uzyskanie oczekiwanego rezultatu kiedy przekonwertować go do Linq. Zwraca count = 1, gdy lewe sprzężenie zwróci wartość null. Więc starałem się to zapytanie:
var list1 = (from building in db.GetTable<Building>()
join entitybuildinguser in db.GetTable<BuildingUser>()
on building.ID equals entitybuildinguser.ID_BUILDING into tmpbuildinguser
from buildinguser in tmpbuildinguser.DefaultIfEmpty()
group building by new
{
building.ID,
building.NAME
} into grpBuilding
orderby grpBuilding.Select(g => g.ID).Count() descending, grpBuilding.Key.NAME
select new
{
ID_BUILDING = grpBuilding.Key.ID,
NAME = grpBuilding.Key.NAME,
users = grpBuilding.Select(g => g.ID).Count()
});
jest twój sql prawidłowe? Pozostajesz dołączać do użytkowników i nic z tym nie robić. Czy czegoś brakuje? –
@ ErenErsönmez masz rację. Zmieniłem się z INNER na LEFT i zapomniałem go wyjąć. Nawet jeśli to się nie zmieni ostateczny wynik. – Gandarez
Grupujesz budowanie według identyfikatora, aby grupa miała tylko jeden budynek (zakładając, że identyfikator jest unikalny). Czy twoja pierwsza grupa powinna grupować 'buildingUser' zamiast' building'? –