我正在使用 LINQ to Entities 从数据库中获取一些数据。以下是我的查询。
var location = from l in dbContext.Locations
join e in dbContext.Equipment on l.ID equals e.LocationID into rs1
from e in rs1.DefaultIfEmpty()
where ids.Contains(l.ID)
select new
{
EquipmentClass = e,
LocationID = l.ID,
LocationName = l.Name,
EquipmentName = e == null ? null : e.Name,
Description = e == null ? null : e.Description,
InServiceStatus = e == null ? false : e.InServiceStatus,
EquipmentType = e.EquipmentType.Name
};
foreach (var item in location)
{
// some logic
}
在上面的代码中,ids是我传入以过滤结果的整数列表。当我得到结果时,我看到其中一个返回记录有一个 null EquipmentClass。我执行了一些空值检查,但意识到我忘记对其中一个属性进行空值检查。现在我希望得到一个空引用异常,EquipmentType = e.EquipmentType.Name但我没有。令我惊讶的是,它工作得很好,并且设置为 null。MyEquipmentClass的属性类型为EquipmentType,这是另一个类。EquipmentType有一个Name属性,它是一个字符串。
为什么这不会引发空引用异常?
就像测试一样,我从中删除了空检查,InServiceStatus = e == null ? false : e.InServiceStatus
并在使用查询运行 foreach 循环时失败并出现无效操作异常。
这是否意味着我只需要对不可为空的值进行空检查?
MYYA
慕尼黑5688855
慕仙森
相关分类