4
respostas

Busca por nome da Categoria usando lista

Esta dando o seguinte erro ( linha 5) ao executar o meu código:

An unhandled exception of type 'System.NullReferenceException' occurred in LojaComEntity.exe

Additional information: Referência de objeto não definida para uma instância de um objeto.

CÓDIGO:

EntidadesContext contexto = new EntidadesContext();
 IList<Produto> prod = contexto.Produtos.ToList();
           var filtrados =  prod
                          .Where(p => p.Preco > 100)
                          .Where(p => p.CategoriaProduto.Nome =="Shampoo")
                          .OrderBy(p => p.Nome);

            foreach (var p in filtrados)
            {
                Console.WriteLine(p.Nome);
            };
     Console.ReadLine();
4 respostas

Olá Denise!

Você pode colocar um breakpoint na linha do comando Console.WriteLine? Pode verificar se o valor de p é null?

Oi Marcelo, O valor de p não é null, apenas o campo CategoriaProduto está null. Se eu fizer: .Where(p => p.CategoriaID == 2 ) , onde 2 é o ID de shampoo, ele retorna normalmente.

Eu alterei o meu código, coloquei o Include e acabou dando certo:

EntidadesContext contexto = new EntidadesContext();

List prods = contexto.Produtos.Include(x => x.CategoriaProduto).ToList();

var filtrados = prods // .Where(p => p.Preco > 100) .Where(p => p.CategoriaProduto.Nome.Equals("Shampoo")) .OrderBy(p => p.Nome);

foreach (var p in filtrados) { Console.WriteLine(p.Nome); };

Só não entendi o motivo de, nesse caso, eu precisar colocar o Include.

Denise,

Por padrão o Entity Framework não carrega as classes de uma entidade, apenas os valores dela. Quando você carrega os produtos o EF não carrega a classe CategoriaProduto que está associado ao Produto. Por isso que quando você usou o Include funcionou, porque o EF carregou os valores dessa classe também.

Abraço.