我看过很多关于此的示例,但在此示例中重新制作它们似乎不起作用。有没有人知道以下代码有什么问题....
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 };
非常感谢
基思
最佳答案
问题是“Exotic”类别中没有产品,因此在尝试读取产品名称时抛出 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]"
};
关于c# - Linq 左连接的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973043/