【发布时间】:2016-05-07 12:47:29
【问题描述】:
在这里我找到了如何使用 Linq2Sql 连接表并计算链接记录的数量LINQ - Left Join, Group By, and 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 日志文件中,我无法在调试器中检查它。
什么是计算“团队”表中符合附加条件的行的正确方法。
附:如果重要的话,我会使用 C# 4.0、MySql 5.1 和 BLToolkit 4.1
【问题讨论】:
-
奇怪,它应该可以工作。错误的堆栈跟踪是什么?
标签: c# mysql linq-to-sql bltoolkit