c# - Linq 左连接的问题

标签 c# .net linq

我看过很多关于此的示例,但在此示例中重新制作它们似乎不起作用。有没有人知道以下代码有什么问题....

    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/

相关文章:

c# - 根据另一个 DataGridView 的行过滤 BindingSource

c# - 列表中小于 X 的最大值

c# - linq 与实体按 desc 排序

c# - 将 LINQ Group By 数据传递到新的对象列表中

c# - 如何在 Microsoft.CppBuild.targets 中抑制类型为 "The Element X in namespace X has invalid child element ..."的警告

c# - 如何通过 Visual Studio 创建和运行 NUnit/WebDriver 测试套件?

c# - 如何检查隐藏值是否为空

.net - 与编码(marshal)结合的反射不起作用

c# - .net 控制台应用程序 32 位与 64 位

c# - 如何使用微软技术开发dbms独立应用程序?