Linq - Consulta Simples não funciona

.NET

C#

02/08/2018

Pessoal,

Eu estou tendo um problema com Linq To Object que eu nunca tive antes;

 public DALClientePessoaJuridica()
        {
            _lstClientes = new List<ClientePessoaJuridica>();
            ClientePessoaJuridica _cliente;
            // Inclusão de clientes

            _cliente = new ClientePessoaJuridica();
            _cliente.Codigo = 1;
            _cliente.Nome = "Contábil Rio";
            _cliente.CNPJ = "0001";
            _cliente.Estado = "RJ";
            _cliente.DataCadastro = Convert.ToDateTime("15/01/2017");
            _lstClientes.Add(_cliente);

            _cliente = new ClientePessoaJuridica();
            _cliente.Codigo = 2;
            _cliente.Nome = "Audit Master Assessoria Jurídica";
            _cliente.Estado = "RJ";
            _cliente.DataCadastro = Convert.ToDateTime("23/02/2017");
            _lstClientes.Add(_cliente);

            _cliente = new ClientePessoaJuridica();
            _cliente.Codigo = 3;
            _cliente.Nome = "RioKasa Empreendimentos imobilitários";
            _cliente.Estado = "SP";
            _cliente.DataCadastro = Convert.ToDateTime("13/04/2015");
            _lstClientes.Add(_cliente);

            _cliente = new ClientePessoaJuridica();
            _cliente.Codigo = 4;
            _cliente.Nome = "GAX Locadora de geradores";
            _cliente.Estado = "RJ";
            _cliente.DataCadastro = Convert.ToDateTime("25/03/2017");
            _lstClientes.Add(_cliente);

            _cliente = new ClientePessoaJuridica();
            _cliente.Codigo = 5;
            _cliente.Nome = "Licitus Consultoria e Empreendimentos";
            _cliente.Estado = "SP";
            _cliente.DataCadastro = Convert.ToDateTime("18/05/2016");
            _lstClientes.Add(_cliente);

        }

        public ClientePessoaJuridica ObterPorCodigo(Int32 pCodigo)
        {
            ClientePessoaJuridica _cliente = (from cliente in _lstClientes
                                              where cliente.Codigo == pCodigo
                                              select cliente) as ClientePessoaJuridica;
            
            return _cliente;
        }


A consulta do método ObterPorCodigo simplesmente não funciona. O retorno da consulta é sempre null mesmo eu informando um código que existe na lista.

Alguém já passou por isso?
Carlos Corbo

Carlos Corbo

Curtidas 0

Melhor post

Carlos Augusto

Carlos Augusto

02/08/2018

posso estar enganado mas acredito que é o seu cast no final.
Tente trocar
ClientePessoaJuridica _cliente = (from cliente in _lstClientes
where cliente.Codigo == pCodigo
select cliente) as ClientePessoaJuridica;
Para
var resultado = (from cliente in _lstClientes
where cliente.Codigo == pCodigo
select cliente);
E veja se o tipo da variável resultado se ela não for nulla.

Eu particulamente prefiro trabalhar com Lambda.
Ficaria mais ou menos assim o seu
ClientePessoaJuridica _cliente = _lstClientes.SingleOrDefault(cli => cli.Codigo == pCodigo);
O _cliente será nullo quando não encontrar.
GOSTEI 1

Mais Respostas

Carlos Corbo

Carlos Corbo

02/08/2018

Cutpro,

Eu resolvi o problema na ocasião, mas eu esqueci de postar a solução. O problema é que do jeito que eu fiz, o compilador não tinha como garantir que só viria somente um objeto na consulta e assim que deveria acontecer uma vez que eu coloquei uma variável que só poderia receber um valor. Então eu resolvi da seguinte forma:

ClientePessoaJuridica _cliente = (from cliente in _lstClientes
where cliente.Codigo == pCodigo
select cliente).FirstAndDefault;

O comando FirstAndDefault garantir que virá o primeiro ou nenhum caso não retorne nenhum objeto. Isso vale também para Lambda.

De qualquer forma, obrigado.
GOSTEI 0
POSTAR