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
我正在尝试转换此查询(已经开始工作):
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