6
我有此查询工作完美:LINQ到SQL左连接,排序和分组按计数
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。当左连接返回null时,它返回count = 1。所以,我一直在尝试此查询:
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
你正在用建筑物ID来编组建筑,所以这个建筑群只有一栋建筑物(假设ID是唯一的)。你的第一个分组是否应该将'buildingUser'而不是'building'分组? –