繁体   English   中英

使用 LINQ 执行左外连接

[英]Using LINQ to perform a left outer join

我正在尝试构建一个列表,其中包含一个列表中的所有对象,但如果该对象存在于另一个列表中,则更新特定属性。

首先,我创建了一个包含所有可能的“选项”的列表。 然后,我想更新此列表中任何项目的“选定”属性,这些项目也存在于我创建的另一个“选项”列表中。 我希望下面的代码可以工作,但我收到异常“对象引用未设置为对象的实例”。

        var query = from o in AllOptions
                    join so in SelectedOptions on o.Code equals so.Code into newOptions
                    from no in newOptions.DefaultIfEmpty()
                    select new Option
        {
            Name = o.Name,
            Description = o.Description,
            Code = o.Code,
            Applicable = o.Applicable,
            Selected = no.Selected
        };

您从投影中的no.Selected语句中获得异常,当no为 null 时,它会抛出异常,因为您正在取消引用 null。

您可以通过在no为 null 时指定默认值来修复它:

//default to false when no is null
Selected = (no == null) ? false : no.Selected

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM