我正在尝试按查询联接次数对Linq分组:
from region in context.Regions
join person in context.Persons on region.Id equals person.RegionId into persons
from personNullable in persons.DefaultIfEmpty()
group personNullable by region.Name into g
select new { g.Key, Members = g.Count(r => r != null) }
结果:
[Name], [Members]
AAA 0
BBB 2
CCC 1
但是此查询无需分组即可转换为SQL,并从两个表中选择所有列(不需要):
SELECT [region0].[ID], [region0].[DateChanged], [region0].[UsrIDChanged], [region0].[DateCreated], [region0].[UsrIDCreated], [region0].[IsDefault], [region0].[Name], [region0].[ParentRegionID], [person0].[ID], [person0].[Street], [person0].[LastName], [person0].[LastVisitDate], [person0].[Age], [person0].[Name], [person0].[RegionID]
FROM [Regions] AS [region0]
LEFT JOIN [Persons] AS [person0] ON [region0].[ID] = [person0].[RegionID]
ORDER BY [region0].[ID]
GO
是否可以仅选择所需的列或通过类似于以下查询的方式进行本机分组:
SELECT r.Name, COUNT(p.Id) AS Memebers
FROM Region AS r
LEFT JOIN Person AS p ON r.Id = p.Region
GROUP BY r.Name