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。LINQ查询中的对象引用错误
但改变选择:
select new {a, b,
responsibleName = b.EmployeeName,
authName = b.EmployeeName,
createName = b.EmployeeName};
没有帮助。快速查询query1显示b为空。
答
b
为空怎么一回事,因为你明确你的查询大声说道,b
应该null
如果序列是通过您使用的DefaultIfEmpty
空。如果您不希望在该序列为空时有null
b
项目,请省略该操作。如果你这样做,那么你需要支持在你的查询中有一个空值b
。
答
请注意,您正在使用.Where
个子句中的多个项目,这些子项可能为null,因此会从这些lambda表达式的任何一个中抛出此异常。在这两个集合上尝试使用.Where(o => o != null)
,这可能会清除该错误。
b如何与a? – 2014-10-01 18:51:41
'.DefaultIfEmpty()'如果它不符合你的标准条件,会导致'b'为空。 – jrummell 2014-10-01 18:53:05
@Allan - a和b都有一个badgeNumber的公共字段 – KTLind 2014-10-01 19:07:39