Linq左连接出现问题

3

我看过不少类似的例子,但是在这个例子中复制它们似乎行不通。有没有人知道以下代码有什么问题...

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

非常感谢您的提前帮助。 Keith
1个回答

1
问题在于“异国情调”类别中没有产品,因此在尝试读取产品名称(在最后一行代码中)时会抛出NullReferenceException异常。
为了使代码不崩溃,您可以添加一个空值检查:
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]"
        };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接