C# 如何将group by with join从SQL Server转换为Linq?
我在SQL Server中有以下代码:C# 如何将group by with join从SQL Server转换为Linq?,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,我在SQL Server中有以下代码: select SUM(td.Valor) as Total, s.Nome as [Servico Prestado] from Transacao tr left join TransacaoDivisao td on tr.CodTransacao = td.CodTransacao left join ServicosPrestado sp on td.CodServicoPrestado = sp.CodServicosPrestado left
select SUM(td.Valor) as Total, s.Nome as [Servico Prestado] from Transacao tr
left join TransacaoDivisao td on tr.CodTransacao = td.CodTransacao
left join ServicosPrestado sp on td.CodServicoPrestado = sp.CodServicosPrestado
left Join servico s on sp.CodServico = s.CodServico
GROUP by s.nome order by 1 desc
但当我尝试转换为linq时,我有以下几点:
var res =
from transacao in dbContext.Transacao
join td in dbContext.TransacaoDivisao on transacao.CodTransacao equals td.CodTransacao
join sp in dbContext.ServicosPrestado on td.CodServicoPrestado equals sp.CodServicosPrestado
join s in dbContext.Servico on sp.CodServico equals s.CodServico
group s by s.Nome into gp
select new
{
servicoPrestado = gp.Key,
td.Valor // throw error
};
您所做的是在您的代码中进行内部连接,就像在sql中一样,您编写了左连接,所以我将使用左连接
var res=(from tr in dbContext.Transacao
join td in dbcontext.TransacaoDivisao
on tr.CodTransacao equals td.CodTransacao
into r11
from r1 in r11.DefaultIfEmpty()
join sp in dbcontext.ServicosPrestado
on r1.CodServicoPrestado equals sp.CodServicosPrestado
into r22
from r2 in r22.DefaultIfEmpty()
join s in dbContext.CodServico
on r2.CodServico equals s.CodServico
into r33
from r3 in r33.DefaultIfEmpty()
select new {r1,r3})
.GroupBy(x=>x.r3?.Nome)
.Select(x=>new
{
Total=x.Sum(z=>(z.r1==null?0:z.r1.Valor)),
Servico Prestado=x.Key
})
.OrderByDescending(x=>x.Key)
.ToList();
这里有一个按抛出错误分组求和的示例-哪个错误?此外,请尝试使用导航属性而不是联接。例如Transacao.Transacao。