2016-03-18 2 views
1

У меня есть этот SQL-запросГруппа по Linq против Transact 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 Allready имеет только данные '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 Returns 28? Как сделать эти предложения одинаковыми?

ответ

3

Вы должны фильтровать результаты, прежде чем проектирование, и ваши оба GroupBy заявления T-SQL и LINQ не одинаковы:

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) 
        }); 
+0

Я собираюсь попробовать. Но простой вопрос: проекция должна быть в другом предложении Linq. Извините, я не эксперт по linq. –

+0

Что вы подразумеваете под другим предложением Linq? –

+0

У вас есть ** ";" ** сразу после ** Где ** предложение –