Pular para o conteúdo principal

Linq para exibição de consultas ao banco de dados.

A pouco tive uma grande dificuldade em solucionar uma mensagem que o controller apresentada ao acionar uma action que seria responsável por buscar detalhes de um produto através do JSonResult. A mensagem de exceção apresentada pelo Visual Studio 2017 era:




The entity or complex type "asses que estava trabalhando>" cannot be constructed in a LINQ to Entities query



O problema foi solucionado a partir do momento que entendi que estava realizando uma consulta no Linq que retornava um objeto do tipo IQueryable e que precisava de uma List<>. Isso foi facilmente resolvido com o procedimento existente .ToList()



Até tudo bem! Uma aparente orelhada. 



Mas ainda sim a mensagem acima não deixava de ser exibida em tempo de execução. 😒 Muitas pesquisas realizadas e descobri que após a seleção dos arquivos eu deveria converter o resultado para uma IEnumerable, atribuir os dados à uma classe com o procedimento Select(lambda expression), utilizar o procedimento Where para filtrar os dados e depois converter isso tudo para uma lista com o .ToList(); 😧


Exemplo de código:  

ListProductsAndPart = (from product in db.tb_ato_products_and_parts
                       join manufacturers in db.tb_ato_manufacturers
                         on product.ama_code equals manufacturers.ama_code
                       into productsAndParts
                         from productAndPartsWithManufactures in productsAndParts.DefaultIfEmpty()
                       group productAndPartsWithManufactures by new
                       {
                         product.pap_code,
                         productAndPartsWithManufactures.ama_name,
                         product.pap_legacy,
                         product.pap_name,
                         product.pap_description,
                         product.pap_unit_of_measurement,
                         product.pap_legacy_manufacturers,
                         product.pap_is_part,
                         product.pap_display
                       } into productsAndPartsGrouped
                       select new
                       {
                         pap_code = productsAndPartsGrouped.Key.pap_code,
                         ama_name = productsAndPartsGrouped.Key.ama_name == null ? "(Sem Fabricante)" : productsAndPartsGrouped.Key.ama_name,
                         pap_legacy = productsAndPartsGrouped.Key.pap_legacy,
                         pap_name = productsAndPartsGrouped.Key.pap_name,
                         pap_description = productsAndPartsGrouped.Key.pap_description,
                         pap_unit_of_measurement = productsAndPartsGrouped.Key.pap_unit_of_measurement,
                         pap_legacy_manufacturers = productsAndPartsGrouped.Key.pap_legacy_manufacturers,
                         pap_is_part = productsAndPartsGrouped.Key.pap_is_part,
                         pap_display = productsAndPartsGrouped.Key.pap_display
                       }).AsEnumerable().Select(p => new tb_ato_products_and_parts()
                       {
                         pap_code = p.pap_code,
                         Manufacturers = new tb_ato_manufacturers() {
                           ama_name = p.ama_name
                         },                                   
                         pap_legacy = p.pap_legacy,
                         pap_name = p.pap_name,
                         pap_description = p.pap_description,
                         pap_unit_of_measurement = p.pap_unit_of_measurement,
                         pap_legacy_manufacturers = p.pap_legacy_manufacturers,
                         pap_is_part = p.pap_is_part,
                         pap_display = p.pap_display
                       }).Where(p => p.pap_legacy == intCodeProductAndParts).ToList();


O código acima é funcional e não retorna erro quando atribuído a variável ListProductsAndPart que foi instanciada com o tipo Object. Uma das correções realizadas no código foram:
  • Inclusão do procedimento .DefaultIfEmpty() após o primeiro from para que permitisse que os registros que não tinham relação através das chaves das Entities relacionadas;
  • Inclusão da expressão (Sem Fabricante);
  • Inclusão do Procedimento .AsEnumerable() que realizava a conversão do tipo IQueryable para IEnumerable isso porque permitiria a conversão para .ToList();
  • Utilização do procedimento Select utilizando uma expressão lambda instanciando a classe e atribuindo valores as propriedades. 



No meu caso Where estava sendo posicionada corretamente e o procedimento .ToList() também.

Caso tenha alguma dúvida por favor me escreva: gestordesistemas@gmail.com





Comentários

Postagens mais visitadas deste blog

Desafios Enfrentados no EAD

O ensino a distância hoje é um destaque e uma solução para os desafios que a humanidade vem enfrentando e existem desafios maiores por parte dos alunos, professores e instituições. Exemplos destes desafios seriam o interesse e a motivação de todos os envolvidos e a crença popular de que a educação a distância não é bem reconhecida pela sociedade e o mercado de trabalho. Por Parte dos Alunos Por parte dos alunos há uma insegurança muito grande quanto ao aprendizado devido as razões como perturbações da vida familiar, falta de apoio dos empregadores e um grave problema com a auto avaliação, que traz um sentimento percebido e relacionado a irrelevância dos estudos. A impressão que se tem, nos primeiros contatos, é que você estuda e não adianta nada. Isso é percebido quando a etapa do curso condicionada a realização de exercícios para seu progresso. Os fatores que contribuem para esse feedback negativo são o conteúdo do curso mal projetado onde avaliações e materiais não se

Site: Estética Equilíbrio e Forma

A Estética Equilibrio e Forma confiou a gestão de seu site responsivo em nós. A empresa é uma clínica especializada em atividades estéticas e cuidados com a saúde. Realiza atendimentos em residências (pós cirúrgico) e no espaço físico da clínica com compromisso, ética e respeito a vontade de cada cliente. Com um endereço de fácil localização recebe clientes em um local bem estruturado, organizado, higienizado e confortável. Para a satisfação dos clientes disponibiliza também um completo patrimônio estético qualidade dos serviços e os diversos tratamentos. Presta os seguintes serviços: em estética facial são limpeza de pele profunda, fangoterapia, peeling facial, lifting cosmético, hidratação facial, massagem facial; em estética corporal são massagem relaxante, redutora e modeladora, banho dourado, SPA dos pés e das mãos, depilação, drenagem linfática. A empresa presta serviços também para o dia da Noiva e do Noivo com preparações para o casamento. Para acessar procure no Google

Incluir nos processos organizacionais a atuação na internet é algo que compensa?

Durante a apresentação dos serviços de internet a empresários dos ramos de papelaria nos estados de Espírito Santo, Rio de Janeiro, São Paulo percebemos que existem dúvidas comuns. Em uma abordagem simples sem muitas explicações a maioria se apega aos custos e acabam limitando sua atuação ao balcão. Existem diversas ferramentas que são capazes de auxiliar na divulgação dos serviços e produtos através da internet. E ainda somente ter um bom site profissional com uma hospedagem de qualidade não é suficiente. Vale também anunciar em outros sites de maior visitação seus produtos e serviços. Porém existem cuidados que se deve tomar quanto a escolha. "O primeiro item a ser verificado é a relevância que esse site tem no mercado e no seu público alvo, você pode fazer uma pesquisa bem simples até informal perguntado para seus amigos, colaboradores, proprietários de lan-houses e cybers-café se o site que você tem interesse de anunciar é conhecido ou acessado. Outro item muito importante a