Ich habe diese Abfrage perfekt funktioniert:Linq to SQL LEFT JOIN, Sortieren und Gruppieren nach Graf
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
aber ich bin nicht das erwartete Ergebnis bekommen, wenn ich es zu Linq zu konvertieren. Es gibt count = 1 zurück, wenn linker Join null zurückgibt. Also, ich habe diese Abfrage versucht, herauszufinden:
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()
});
Ist Ihr SQL korrekt? Sie bleiben den Benutzern verbunden und tun nichts damit. Fehle ich etwas? –
@ ErenErsönmez du hast Recht. Ich habe von INNER nach LINKS gewechselt und vergessen, es herauszunehmen. Selbst wenn es aus ist, ändert sich das Endergebnis nicht. – Gandarez
Sie gruppieren Gebäude nach ihrer ID, sodass diese Gruppe nur ein Gebäude enthält (vorausgesetzt, die ID ist eindeutig). Sollte Ihre erste Gruppierung "buildingUser" statt "building" gruppieren? –