LINQ查询中的对象引用错误

时间:2014-10-01 18:50:17

标签: c# linq

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 为空。

2 个答案:

答案 0 :(得分:2)

b是空的,因为如果通过使用b序列为空,null应该是DefaultIfEmpty,您在查询中明确提到了这一点。如果您不希望在该序列为空时有null b项,请省略该操作。如果这样做,那么您需要支持在查询中使用空b值。

答案 1 :(得分:0)

请注意,您正在使用.Where子句中的多个项目,这些项目在集合中可能为null,因此会从这些lambda中的任何一个中抛出此异常。尝试在这两个集合上使用.Where(o => o != null),这可能会清除错误。