在这里,我找到了如何使用 Linq2Sql 连接表并计算链接记录的数量LINQ - Left Join、Group By 和 Count
我已经实现了它,它对我来说没问题:以下表达式
var v = from c in db.GetTable<Country>()
join t0 in db.GetTable<Team>() on c.Id equals t0.CountryId into t1
from team in t1.DefaultIfEmpty()
group team by c.Id into teamsGrouped
select new CountryTeamsInfo
{
CountryId = teamsGrouped.Key,
TeamsTotal = teamsGrouped.Count(),
// TeamsWithoutOwnerFree = teamsGrouped.Count(t => t.OwnerId==0)
}
;
List<CountryTeamsInfo> res = v.ToList();
生成以下查询:
SELECT c.Id, Count(*) as c1
FROM countries c
LEFT JOIN teams t1 ON c.Id = t1.Country
GROUP BY c.Id
事实上,我还需要计算那些 OwnerId 字段不等于 0 的链接器记录。
看起来我应该在 linq 表达式 (TeamsWithoutOwnerFree = teamsGrouped.Count(t => t.OwnerId==0)) 中取消注释该行,但这不起作用,尝试执行会导致错误:
字典中不存在给定的键
查询不会出现在 SQL 日志文件中,我无法在调试器中检查它。
什么应该是从“团队”表中计算符合其他标准的行的正确方法。
PS 如果重要,我使用 C# 4.0、MySql 5.1 和 BLToolkit 4.1