VB。 NET:LINQ to SQL 相当于 Count - 按查询分组

VB. NET: LINQ to SQL equivalent to Count - group by query

我正在尝试转换此查询(已经开始工作):

Select building.Name, Count(people.ID) as NumberOfUser
From tblBuilding as building left outer join tblPeople as people on building.ID = people.buildingID
Group by building.Name

结果如下:

Name          | NumberOfUser
----------------------------
WestBuilding    50
EastBuilding    70
SouthBuilding   0
NorthBuilding   2

Linq 到 SQL。看看我的努力:

Dim db As New MyDatabaseDataContext
Dim query = From building In db.tblBuilding
            From people In db.tblPeople.Where(Function(x) building.ID = x.buildingID).DefaultIfEmpty
            Group building, people By building.ID, building.Name Into grp
                Select ID, Name, grp.Count
Return query.ToList

一开始似乎有效。但是当我检查一个没有人的建筑物时,Count列说有1。像这样:

Name          | NumberOfUser
----------------------------
WestBuilding    50
EastBuilding    70
SouthBuilding   1
NorthBuilding   2

因为那个楼虽然没有人,但是在结果查询中确实出现了一次,所以算了1次。换句话说,Count语句实际上是统计每个楼在结果中出现的次数table每栋楼里有多少人,因此没有人楼的结果是错误的。

有解决办法吗?

你是对的,要解决这个问题你需要测试是否有人,就像你在 count(people.Id)

中所做的那样
Dim db As New MyDatabaseDataContext
Dim query = From building In db.tblBuilding
            From people In db.tblPeople.Where(Function(x) building.ID = x.buildingID).DefaultIfEmpty
            Group building, people By building.ID, building.Name Into Group, Count(Not IsNothing(people))
'Select ID, Name, grp.Count
Return query.ToList