LINQ中的左外连接

时间:2011-03-25 15:07:08

标签: c# linq

以下代码不断给我一条错误消息:

  

对象引用未设置为对象的实例

var partsWithDefaults =
    from partsList1 in p
    join partsList2 in d on 
    new {   PartNo = partsList1.PartNumber, 
            Rev = partsList1.Revision }
    equals
    new {   PartNo = partsList2.PartNumber, 
            Rev = partsList2.Revision } into joinedLists
    from partDefaults in joinedLists.DefaultIfEmpty()
    select new Part()
    {
        PartNumber = partsList1.PartNumber,
        Revision = partsList1.Revision,
        Description = partsList1.Description,
        UoM = (partDefaults.UoM == null) ? "Null" : partDefaults.UoM,
        ABC = (partDefaults.ABC == null) ? "Null" : partDefaults.ABC            
    };

partsList1是主列表,其中包含PartNumber,Revision和Description字段。 partsList2包含PartNumber和Revision字段(要加入)以及一些补充字段(代码中的2个示例是UoM和ABC)。 partsList2中可能没有为partsList1中的每个项目都有一个项目,因此需要左外连接。

p和d的类型为List<Part>

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

如果joinedLists为空,则partDefaults将为null,因此您无法取消引用它。试试这个:

UoM = partDefaults == null ? "Null" : partDefaults.UoM ?? "Null",
ABC = partDefaults == null ? "Null" : partDefaults.ABC ?? "Null",

(作为投影的最后两位)。

请注意,这可以解决partDefaults为空相关属性为空的问题。