var query1 = from a in inputDataRecords
from b in employeeDataRecords
.Where(badgeNumber => a.Responsi == badgeNumber.Badge)
.Where(badgeNumber => a.Auth == badgeNumber.Badge)
.Where(badgeNumber => a.ByN == badgeNumber.Badge)
.DefaultIfEmpty()
select new {a,
responsibleName = b.EmployeeName,
authName = b.EmployeeName,
createName = b.EmployeeName};
给出了一个错误:对象引用未设置为对象的实例。 我知道这是因为我没有引用 b 。
但是将选择更改为:
select new {a, b,
responsibleName = b.EmployeeName,
authName = b.EmployeeName,
createName = b.EmployeeName};
无济于事。 query1 上的QuickWatch显示 b 为空。
答案 0 :(得分:2)
b
是空的,因为如果通过使用b
序列为空,null
应该是DefaultIfEmpty
,您在查询中明确提到了这一点。如果您不希望在该序列为空时有null
b
项,请省略该操作。如果这样做,那么您需要支持在查询中使用空b
值。
答案 1 :(得分:0)
请注意,您正在使用.Where
子句中的多个项目,这些项目在集合中可能为null,因此会从这些lambda中的任何一个中抛出此异常。尝试在这两个集合上使用.Where(o => o != null)
,这可能会清除错误。