c# - 如何将此 SQL 转换为 Linq?
问题描述
我有一个查询:
select siniflar.id,siniflar.sinif,count(ogrenciId)
from siniflar
left join oda
on siniflar.id=oda.sinifId
where siniflar.ogretmenid=2
group by siniflar.id,siniflar.sinif
这是我对 Linq 的转换:
from snf in db.siniflar
join oda in db.oda
on snf.id equals oda.sinifId
where snf.ogretmenid==oID
group oda by new
{
snf.id,snf.sinif
} into g
select new
{
sinifIDsi=g.Key.id,
sinifADi=g.Key.sinif,
Column1 = g.Count()
})
我也想要空计数的结果,但我无法将左或右加入与 group by 一起适应 linq。DefaultIfEmpty() 方法不起作用。谁能帮我?
解决方案
您还可以添加DefaultIfEmpty()
计算左表的空计数,如以下查询:
var result = (from snf in db.siniflar
join oda in db.oda on snf.id equals oda.sinifId into leftedOdatas
from leftedOdata in leftedOdatas.DefaultIfEmpty()
where snf.ogretmenid == 2
group leftedOdata by new {snf.id, snf.sinif } into g
select new
{
sinifIDsi = g.Key.id,
sinifADi = g.Key.sinif,
Column1 = g.Count(x => x?.sinifId != null)
}).ToList();
我希望你觉得这有帮助。
推荐阅读
- c++ - 为什么 MSVC 和 GCC 在 vtable 中以不同方式放置覆盖的纯虚函数?
- unix - Bash Unix:Tee 和 PID
- python-3.x - django 模型在每次迁移时都会收到 Alter Field 警报
- flutter - Get.to(MyPage()) - 如何删除所有以前的路由 - Flutter GetX
- typescript - 减速器类功能中的打字稿类型问题
- android - 如何使用提供者值更新其他页面?
- mysql - 返回子查询中的最后一条记录 - MySQL
- flutter - 文本未显示我发送给它的变量
- tableau-api - 如何基于最小日期进行聚合,但仅在对所有日期应用维度过滤器之后?
- python - 如果仅句子包含搜索列表中的任何关键字,则从数据框文本列中选择句子