Linq - Consulta Simples não funciona
Pessoal,
Eu estou tendo um problema com Linq To Object que eu nunca tive antes;
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?
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
Curtidas 0
Melhor post
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.
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
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.
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