【问题标题】:How to convert group by with join from SQL Server to Linq?如何通过连接从 SQL Server 转换为 Linq?
【发布时间】:2018-07-19 14:59:14
【问题描述】:

我在 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 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
  };

【问题讨论】:

  • 这里有一个sum with group bycsharp-examples.net/linq-sum的例子
  • throw error - 哪个错误?另外,尝试使用导航属性而不是连接。例如Transacao.TransacaoDivisao.

标签: c# sql sql-server linq


【解决方案1】:

你正在做的是在你的代码中进行内部连接,就像你在 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();

【讨论】:

    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 2019-06-09
    • 2016-12-19
    • 1970-01-01
    • 2022-08-11
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多