首页 文章

LINQ2SQL不会返回与T-SQL相同的结果...

提问于
浏览
2

我有以下表格:

Paciente - > PacienteTag - >标签

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()
}

从我的方法来看,这不是 far . 但令人惊讶的是,这也会带来同样错误的结果!

我可以看到错误“在哪里”,但我无法找到替代方案 .

我究竟做错了什么?

注意:在上面的示例中,表PacienteTag有两条记录将Tag4与两名随机患者相关联,我的T-SQL正在返回正确的值 .

想法?

1 回答

  • 3

    假设您的关系设置正确并且Tag中有PacienteTags引用PacienteTags,则以下内容应该有效 .

    from t in db.Tag orderby t.TagName 
    select new { t.TagName, Totals = g.PacienteTags.Count() };
    

    我发现加入LINQ到(任何东西)的需要非常罕见......只需利用生成的引用来获取其他表(或实体,如果使用EF)中的数据 .

相关问题