none
Subselect em linq RRS feed

  • Pergunta

  • Bom dia Pessoal, montei as pesquisa em Linq abaixo:

    var listaChamadosDepto = from icd in dc.Incidentes
                                         join atd in dc.AtendenteAuxiliars on icd.Id equals atd.IdChamado into leftJoinAtd
                                         from atd in leftJoinAtd.DefaultIfEmpty()
                                         join usr in dc.Usuarios on icd.Usuario equals usr.Id
                                         join und in dc.Unidades on usr.Unidade equals und.Id
                                         join depto in dc.Departamentos on usr.Departamento equals depto.ID
                                         join sla in dc.SLAs on icd.catalogo equals sla.Id
                                         where icd.DataEncerrament == null
                                         && depto.ID == nDepto.ID
                                         orderby icd.DataAbertura, icd.Prioridade
                                         select new
                                         {
                                             icd.Id,
                                             icd.DataAbertura,
                                             icd.DtVencimento,
                                             icd.Prioridade,
                                             icd.Usuario,
                                             usr.NomeCompleto,
                                             Unidade = und.Descricao,
                                             Departamento = depto.Descricao,
                                             icd.Assunto,
                                             icd.Classificacao,
                                             icd.DataEncerrament,
                                             icd.IdIncidenteFornecedor,
                                             icd.DataResolucaoFor,
                                             icd.catalogo
                                         };

    No retorno da coluna "Departamento", estou trazendo a escrição relacionado ao join do usuario, porém gostaria de trazer a descrição da relação da tabela SLA que montei, desta forma monte a pesquisa abaixo utilizando um subselect:

    var listaChamadosDepto = from icd in dc.Incidentes
                                        join atd in dc.AtendenteAuxiliars on icd.Id equals atd.IdChamado into leftJoinAtd
                                        from atd in leftJoinAtd.DefaultIfEmpty()
                                        join usr in dc.Usuarios on icd.Usuario equals usr.Id
                                        join und in dc.Unidades on usr.Unidade equals und.Id
                                        join depto in dc.Departamentos on usr.Departamento equals depto.ID
                                        join sla in dc.SLAs on icd.catalogo equals sla.Id
                                        where icd.DataEncerrament == null
                                        && depto.ID == nDepto.ID
                                        orderby icd.DataAbertura, icd.Prioridade
                                        select new
                                        {
                                            icd.Id,
                                            icd.DataAbertura,
                                            icd.DtVencimento,
                                            icd.Prioridade,
                                            icd.Usuario,
                                            usr.NomeCompleto,
                                            Unidade = und.Descricao,
                                            Departamento = (from dpt in dc.Departamentos where sla.IdDepartamento == dpt.ID select new { dpt.Descricao }),
                                            icd.Assunto,
                                            icd.Classificacao,
                                            icd.DataEncerrament,
                                            icd.IdIncidenteFornecedor,
                                            icd.DataResolucaoFor,
                                            icd.catalogo
                                        };

    O problema para esta pesquisa é que o subselect monta um count(*) ao inves de trazer a "descrição", o que preciso para fazer com que ele traga a descrição?


    W.Marrane

    quarta-feira, 11 de maio de 2016 13:56

Respostas

  • Conforme já mencionado, coloca o FirstOrDefault

    icd.Id, icd.DataAbertura, icd.DtVencimento, icd.Prioridade, icd.Usuario, usr.NomeCompleto, Unidade = und.Descricao, Departamento = (from dpt in dc.Departamentos where sla.IdDepartamento == dpt.ID select new { dpt.Descricao }).FirstOrDefault(), icd.Assunto, icd.Classificacao, icd.DataEncerrament, icd.IdIncidenteFornecedor, icd.DataResolucaoFor, icd.catalogo

    • Marcado como Resposta W. Marrane quarta-feira, 11 de maio de 2016 14:24
    quarta-feira, 11 de maio de 2016 14:04

Todas as Respostas

  • Olá,

    Vai precisar colocar no final um .FirstorDefault(). Ele esta trazendo um count porque esta devolvendo um objeto colection e não um único registro.


    quarta-feira, 11 de maio de 2016 14:00
  • Conforme já mencionado, coloca o FirstOrDefault

    icd.Id, icd.DataAbertura, icd.DtVencimento, icd.Prioridade, icd.Usuario, usr.NomeCompleto, Unidade = und.Descricao, Departamento = (from dpt in dc.Departamentos where sla.IdDepartamento == dpt.ID select new { dpt.Descricao }).FirstOrDefault(), icd.Assunto, icd.Classificacao, icd.DataEncerrament, icd.IdIncidenteFornecedor, icd.DataResolucaoFor, icd.catalogo

    • Marcado como Resposta W. Marrane quarta-feira, 11 de maio de 2016 14:24
    quarta-feira, 11 de maio de 2016 14:04