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
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]"
};
精彩评论