2
我有如下表:LINQ2SQL不返回相同的结果为T-SQL ...
Paciente - > PacienteTag - >标签
典型的N:Paciente和标签之间米,中介表。
我想获得每个标签有多少患者。很简单:
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()
}
这是不是远从我的做法。但令人惊讶的是,这也带来了相同的错误结果!
我可以看到错误“是”在哪里,但我不能与替代方案来。
我在做什么错?
注意:在上面的示例中,PacienteTag表有两个将Tag4与两个随机患者相关联的记录,我的T-SQL正在返回正确的值。
想法?
THanks,这个技巧,我不得不使用:“orderby t.TagName” – 2009-12-03 15:31:00
对不起。更正了代码。我习惯于从EF中执行ObjectQuery语法。 – mkedobbs 2009-12-03 15:53:45