[英]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.