Paciente->PacientTag->标签
Paciente和带有中间表的Tag之间的典型N:M。
SELECT Tag.TagName, COUNT(PacienteTag.TagId) AS Totals FROM Tag
LEFT JOIN PacienteTag ON Tag.TagId = PacienteTag.TagId
GROUP BY Tag.TagName
ORDER BY Tag.TagName
结果是一个简单的表,如下所示:
Tag1, 0
Tag2, 0
Tag3, 0
Tag4, 2
Tag5, 0
Etcâ¦
然而,当我创建我的LINQ2SQL(鉴于我有限的LINQ2SQL知识)版本时,结果如下:
Tag1, 1
Tag2, 1
Tag3, 1
Tag4, 2
Tag5, 1
Etcâ¦
我感到困惑,但或多或少理解了LINQ在做什么,我下载了Linqer并告诉它为我翻译SQL表达式。
它得出了这样的结论:
from t in db.Tag
join t0 in db.PacienteTag on t.TagId equals t0.TagId into t0_join
from t0 in t0_join.DefaultIfEmpty()
group t by new {
t.TagName
} into g
orderby
g.Key.TagName
select new {
g.Key.TagName,
Totals = (Int64?)g.Count()
}
但事实并非如此
我可以看出错误在哪里,但我不能提供替代方案。
我做错了什么?
注意:在上面的示例中,表PacientTag有两条记录将Tag4与两个随机患者关联,我的T-SQL返回的是正确的值。
思想?