如何解决选择加入计数并按分组
我的代码中有linq查询,但没有给出正确的输出。 我有两个具有1-n关系的Mysql表“类”和“元素”。这是查询:
from p in db.Classes
from e in db.Eleves.LeftJoin(el => el.Classe == p.IdC)
group e by p.IdC into _
select new Classe{IdC=_.Key,Num=_.Count()}
它生成以下SQL语句:
SELECT
`t2`.`id_c`,Count(*) as `c1`
FROM
`classe` `t2`
LEFT JOIN `eleve` `t1` ON `t1`.`classe` = `t2`.`id_c`
GROUP BY
`t2`.`id_c`
输出以下结果:
第一手,我认为这很好。但是我注意到带有 no “ eleves”的“ classes”也在“ cl”列中也输出了“ 1”。当我这样编辑SQL语句时:
SELECT
`t2`.`id_c`,Count(matricule) as `c1`
FROM
`classe` `t2`
LEFT JOIN `eleve` `t1` ON `t1`.`classe` = `t2`.`id_c`
GROUP BY
`t2`.`id_c`
结果是:
这是预期的输出。 谷歌搜索后,我不知道如何格式化查询以获取正确的输出。 我尝试了很多这样的建议
from p in db.Classes
from e in db.Eleves.LeftJoin(el => el.Classe == p.IdC)
group e by p.IdC into _
select new Classe { IdC = _.Key,elv = _.Count(u=>u.Matricule!=null) }
或
from p in db.Classes
from e in db.Eleves.LeftJoin(el => el.Classe == p.IdC)
group e by p.IdC into _
select new Classe { IdC = _.Key,elv = _.Select(x => x.Matricule).Distinct().Count() }
但是我收到错误“ LinqToDB.LinqToDBException”:“ u.Matricule”无法转换为SQL。 “
我最终找到了一个给出正确输出的查询:
from p in db.Classes
join e in db.Eleves on p.IdC equals e.Classe into k
select new Classe { IdC = p.IdC,elv = k.Count()}
生成以下SQL语句:
SELECT
`p`.`id_c`,(
SELECT
Count(*)
FROM
`eleve` `t1`
WHERE
`p`.`id_c` = `t1`.`classe`
) as `c1`
FROM
`classe` `p`
但是我不知道这是否是处理此问题的优化方法。 你能给我建议吗?
解决方法
使用以下LINQ查询:
from p in db.Classes
from e in db.Eleves.LeftJoin(el => el.Classe == p.IdC)
group e by p.IdC into _
select new Classe
{
IdC = _.Key,elv = _.CountExt(u => u.Matricule,Sql.AggregateModifier.Distinct)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。