Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将此SQL转换为Linq?_C#_Sql_Linq - Fatal编程技术网

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