6
Tôi đã truy vấn này làm việc một cách hoàn hảo:LINQ to SQL Left Join, Trình tự, Nhóm By Đếm
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
Tuy nhiên tôi không nhận được kết quả mong đợi khi tôi chuyển nó sang LINQ. Nó trả về count = 1 khi left join trả về null. Vì vậy, tôi đã cố gắng truy vấn này:
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()
});
là sql của bạn có đúng không? bạn đã tham gia vào Người dùng và không làm gì với nó. Tui bỏ lỡ điều gì vậy? –
@ ErenErsönmez bạn nói đúng. Tôi đã thay đổi từ INNER sang LEFT và quên lấy nó ra. Ngay cả khi nó ra không thay đổi kết quả cuối cùng. – Gandarez
Bạn đang tạo nhóm theo ID của nó, do đó nhóm đó sẽ chỉ có một tòa nhà trong đó (giả sử ID là duy nhất). Nhóm đầu tiên của bạn có nên nhóm 'buildingUser' thay vì' building' không? –