简体   繁体   English

LINQ中的左外连接

[英]Left outer join in LINQ

The following piece of code keeps giving me an error message of: 以下代码不断给出一条错误消息:

Object reference not set to an instance of an object 你调用的对象是空的

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 is the master list which contains the PartNumber, Revision and Description fields. partsList1是包含PartNumber,Revision和Description字段的主列表。 partsList2 contains the PartNumber and Revision fields (to join on) and also some supplemental fields (2 examples in code are UoM and ABC). partsList2包含PartNumber和Revision字段(要加入)以及一些补充字段(代码中的2个示例是UoM和ABC)。 There may not be an item in partsList2 for every item in partsList1 hence the need for a left outer join. partsList2中的每个项目在partsList2中可能没有项目,因此需要左外连接。

p and d are of type List<Part> . p和d的类型为List<Part>

How can this be fixed? 怎么解决这个问题?

If joinedLists is empty, partDefaults will be null, so you can't dereference it. 如果joinedLists为空,则partDefaults将为null,因此您无法取消引用它。 Try this: 尝试这个:

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

(as the last two bits of your projection). (作为投影的最后两位)。

Note that this copes with either partDefaults being null or the relevant property being null. 请注意,这可以处理partDefaults为null 相关属性为null。

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

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