tags:

views:

35

answers:

1

I have seen a number of examples on this but re-producting them in this example does not seem to work. Does anyone have any ideas what is wrong with the following code....

    var products = new[]
    { 
        new {ProductName ="Soda", Category = "Beverages"},
        new {ProductName ="Tuna", Category = "SeaFood"},
        new {ProductName ="Jam", Category = "Condiment"}
    };

    var categories = new[]
    { 
        new {Category = "Beverages", Description="Slurp"},
        new {Category = "SeaFood" , Description="Nosh"},
        new {Category = "Exotic" , Description="Spicy!"},
    };

    var q = from c in categories
                 join p in products on c.Category equals p.Category into tmp
                 from prd in tmp.DefaultIfEmpty()
                 select new { Category = c.Category, 
                              Description = c.Description,        
                              ProductName = prd.ProductName };

Many Thanks in advance

Keith

+1  A: 

The problem is that there is no product in the category "Exotic", so there is a NullReferenceException thrown when trying to read the product name (in the last code line).

For the code not to crash you can add a null check:

var q = from c in categories
        join p in products on c.Category equals p.Category into tmp
        from prd in tmp.DefaultIfEmpty()
        select new
        {
            Category = c.Category,
            Description = c.Description,
            ProductName = prd != null ?  prd.ProductName : "[null]"
        };
Fredrik Mörk