2016-10-11 164 views
1

我想包括子属性的属性,而是返回空,即使我用包容的财产包括嵌套嵌套子与LINQ

var notas = 
       dtx.NFeItem.Where(n => n.Empresa.EmpresaId == empresa.EmpresaId) 
        .Where(n => n.NFe.ide_dEmi.Value.Year >= anoInicial) 
        .Where(n => n.NFe.ide_dEmi.Value.Month >= mesInicial) 
        .Where(n => n.NFe.ide_dEmi.Value.Year <= anoFinal) 
        .Where(n => n.NFe.ide_dEmi.Value.Month <= mesFinal) 
        .Where(n => n.NFe.ide_tpNF == "1") 
        .Include(n => n.NFe) 
        .Include(n => n.NFe.participante.Empresa) 
        .GroupBy(g => new { g.CST_ICMS, g.CFOP, g.aliqICMS, g.pRedBC_ICMS, g.NFe.ide_dEmi.Value.Month, g.NFe.ide_dEmi.Value.Year, g.NFe.participante }) 
        .Select(i => new { i.Key.CFOP, CST = i.Key.CST_ICMS, pICMS = i.Key.aliqICMS, pRedBC = i.Key.pRedBC_ICMS, mes = i.Key.Month, ano = i.Key.Year, NFePart = i.Key.participante }); 

即使使用Include(n => n.NFe.participante.Empresa)的属性返回null

然后我做的秋季

var periodos = notas.DistinctBy(i => new { i.ano, i.mes }).Select(i => new { i.ano, i.mes }).ToList(); 


      foreach (var periodo in periodos) 
      { 

       var notasPeriodo = notas.Where(i => i.ano == periodo.ano && i.mes == periodo.mes).ToList(); 
       var participantes = notasPeriodo.DistinctBy(p => p.NFePart.CNPJ).Select(i => i.NFePart).ToList(); 


    //etc..... 
    } 

结果:

enter image description here

+3

EF被称为忽略包括正在使用投影(选择)像你的。 –

+0

@IvanStoev你知道我该如何解决这个问题? –

回答

2

如果最终查询结果元素类型不是用作包含的根的实体,则EF将忽略Include表达式。

你可以做的是包括在查询投影所需的性能,并依靠EF导航属性修正将它们绑定到相应的对象引用它们:当查询

var notas = dtx.NFeItem 
    .Where(n => n.Empresa.EmpresaId == empresa.EmpresaId) 
    .Where(n => n.NFe.ide_dEmi.Value.Year >= anoInicial) 
    .Where(n => n.NFe.ide_dEmi.Value.Month >= mesInicial) 
    .Where(n => n.NFe.ide_dEmi.Value.Year <= anoFinal) 
    .Where(n => n.NFe.ide_dEmi.Value.Month <= mesFinal) 
    .Where(n => n.NFe.ide_tpNF == "1") 
    .GroupBy(g => new { g.CST_ICMS, g.CFOP, g.aliqICMS, g.pRedBC_ICMS, g.NFe.ide_dEmi.Value.Month, g.NFe.ide_dEmi.Value.Year, g.NFe.participante }) 
    .Select(i => new 
    { 
     i.Key.CFOP, 
     CST = i.Key.CST_ICMS, 
     pICMS = i.Key.aliqICMS, 
     pRedBC = i.Key.pRedBC_ICMS, 
     mes = i.Key.Month, 
     ano = i.Key.Year, 
     NFePart = i.Key.participante, 
     // include properties: 
     i.Key.participante.Empresa, 
    });