c# - Linq 与 Transact Sql 分组

标签 c# linq tsql

我有这个 SQL 查询

select GrupoEmpaque,NumIdConceptoEmpaque,sum(NumCantidadEmpaques) 
    from Movimientos_Pedidos 
    where StrIdDocumento = '009000PV00000000000000599' and (GrupoEmpaque is null or GrupoEmpaque = 0 )
    group by GrupoEmpaque , NumIdConceptoEmpaque  

**It Returns:** 

NULL    338 25

在另一边我有这个 Linq,Pedido 已经只有 '009000PV00000000000000599' 数据

var EmpaquesItemUnico = Pedido.Movimientos_Pedidos
    .GroupBy(x => x.NumIdConceptoEmpaque)
    .Select(x => new { GrupoEmpaque = x.FirstOrDefault().GrupoEmpaque, TipoEmpaque = x.FirstOrDefault().Merlin_ConceptosFacturacionEmpaque, Cantidad = x.Sum(y => y.NumCantidadEmpaques) })
    .Where(x => x.GrupoEmpaque == 0 || x.GrupoEmpaque == null);

But now the results are       
NULL    338 28

现在我的问题是:

为什么 TSQL 返回 25 而 Linq 返回 28? 如何让这些句子返回相同的结果?

最佳答案

在投影之前你必须先过滤结果,你的t-sql和linq的groupby语句是不一样的:

var EmpaquesItemUnico = Pedido.Movimientos_Pedidos
    .GroupBy(x => new
                  { 
                    NumIdConceptoEmpaque =x.NumIdConceptoEmpaque,
                    GrupoEmpaque  = x.GrupoEmpaque 
                  }
            )
    .Where(x => x.Key.GrupoEmpaque == 0 || x.Key.GrupoEmpaque == null)
    // now project here
    .Select(x=> new 
                   {
                    NumIdConceptoEmpaque  = x.Key.NumIdConceptoEmpaque,
                    GrupoEmpaque  = x.Key.GrupoEmpaque,
                    Sum = x.Sum(y => y.NumCantidadEmpaques)
                   });

关于c# - Linq 与 Transact Sql 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084590/

相关文章:

c# - Visual Studio 智能感知类建议

c# - 汇总树上的值

sql - 在同一查询中多次调用 CTE

sql-server-2008 - 必须声明标量变量 "@TEMPLATE_NAME"

sql-server - SQL Server 2014执行计划创建需要很长时间(旧版本很快)

c# - 匹配包含未知文本的字符串

javascript - AJAX Post 请求发送重复请求

c# - 导入的 system.web,我没有看到 server.mapPath?

c# - 带有 MethodInfo 和泛型类型参数的 Expression.Call

c# - Linq 加入重复记录 c#