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