使用LINQ执行左外连接

时间:2011-02-15 11:15:15

标签: linq

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

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

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

1 个答案:

答案 0 :(得分:2)

您从预测中的no.Selected语句中获取异常,当no为null时,它会抛出,因为您要取消引用null。

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

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