C# 如何将此SQL转换为Linq?
我有一个问题:C# 如何将此SQL转换为Linq?,c#,sql,linq,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.o
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()
})
我也想要空计数的结果,但我不能通过GROUPBY将左或右连接调整为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();
我希望这对您有所帮助。为什么
DefaultIfEmpty()
不起作用?非常感谢。这对我来说有点帮助,但是空列值为1。他们一定没事,我找到了。添加了模型id=g.Count(p=>p.id!=null)的括号之间的null值,并且该值有效。再次感谢你!就是这样,但我们可以给您一个异常,将其更改为x=>x?.sinifId!=null
,因为对于左联接,leftedOdata
可以是null
。