Error with LEFT JOIN in LINQ

0

My query is returning as error

  

Additional information: Object reference not set to an instance of an object.

When I try to make a category that has no product display "(Non-existent)":

        var lst = from c in BDProduto.categorias
                  join p in BDProduto.produtos on c.IdCategoria equals p.IdCategoria into g
                  from gr in g.DefaultIfEmpty()
                  select new
                  {
                      IDCategoria = gr.IdCategoria,
                      Categoria = gr.Categoria,
                      IDProduto = gr.IdProduto,
                      Produto = gr == null ? "(Inexistente)" : gr.Produto
                  };

        foreach (var item in lst)
        {
            Console.WriteLine("IDCategoria: {0}, Categoria: {1}, IDProduto: {2}, Produto: {3}",
                              item.IDCategoria, item.Categoria, item.IDProduto, item.Produto);
        }
    
asked by anonymous 04.09.2015 / 20:40

1 answer

2

You can not access a property of a Null object, in this case gr , but I believe that IdCategoria , Categoria and IdProduto are c properties, so do this:

var lst = 
    from categoria in BDProduto.categorias
    join produto in BDProduto.produtos on categoria.IdCategoria equals produto.IdCategoria into ljProduto
    from lProduto in ljProduto.DefaultIfEmpty()
    select new 
    {
        IDCategoria = categoria.IdCategoria,
        Categoria = categoria.Categoria,
        IDProduto = categoria.IdProduto,
        Produto = lProduto == null ? "(Inexistente)" : lProduto.Produto
    };

foreach (var item in lst)
{
    Console.WriteLine("IDCategoria: {0}, Categoria: {1}, IDProduto: {2}, Produto: {3}",
                      item.IDCategoria, item.Categoria, item.IDProduto, item.Produto);
}
    
04.09.2015 / 21:28