6
Ho questa domanda perfettamente funzionante:LINQ to SQL LEFT JOIN, Ordine e Gruppo dal conte
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
Tuttavia non sto ottenendo il risultato previsto quando ho convertirlo in LINQ. Restituisce count = 1 quando left join restituisce null. Così, ho cercato fuori questa domanda:
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()
});
È il vostro SQL corretta? ti rimane unito agli utenti e non fai nulla con esso. Mi sto perdendo qualcosa? –
@ ErenErsönmez hai ragione. Sono cambiato da INTERNO a SINISTRA e ho dimenticato di tirarlo fuori. Anche se è fuori non cambia il risultato finale. – Gandarez
Stai raggruppando la costruzione in base al suo ID, in modo che il gruppo abbia sempre un solo edificio (supponendo che l'ID sia univoco). Il tuo primo raggruppamento dovrebbe raggruppare 'buildingUser' invece di' building'? –