6
Я этот запрос работает отлично:Linq к SQL Left Join, заказ и Group By Count
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
Однако я не получаю ожидаемый результат, когда я преобразовать его в Linq. Он возвращает count = 1, когда left join возвращает null. Таким образом, я пытался этот запрос:
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()
});
Каково ваше SQL правильно? вы остаетесь присоединяться к Пользователям и ничего не делаете с ним. Я что-то упускаю? –
@ ErenErsönmez, вы правы. Я изменился с INNER на LEFT и забыл его вынуть. Даже если он вышел, он не изменит конечный результат. – Gandarez
Вы группируете здание по его идентификатору, так что в группе будет только одно здание (при условии, что идентификатор уникален). Если ваша первая группировка будет группировать 'buildingUser' вместо' building'? –