Error with LEFT JOIN on LINQ

Asked

Viewed 35 times

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);
        }

1 answer

2


you cannot access a property of a Null object, in case the gr, but I believe that IdCategoria, Categoria and IdProduto are properties of c, then do so:

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);
}
  • Toby, your code worked, but Idproduct does not appear result, always returns 0 (zero). It is part of Product, only the property Idcategoria that is part of Product and Category.

  • @Kellysoares, in this case you need to do with Idproduct the same as with Product, check if the object is null before trying to access product.Idproduct

Browser other questions tagged

You are not signed in. Login or sign up in order to post.