如果外键为空,在linq查询中使用导航属性会抛出错误
本文关键字:导航 属性 错误 出错 查询 linq 如果 | 更新日期: 2023-09-27 18:02:38
var devSum = repository.Devices
.Where(dev => dev.Id == deviceId)
.SingleOrDefault();
vmDeviceSummary result = new vmDeviceSummary
{
DeviceId = deviceId,
DeviceName = devSum.Name,
MacAddress = devSum.MacAddress,
DeviceType = devSum.DeviceType.Name,
Enabled = devSum.Enabled.ToString(),
ConfigurationLoaded = devSum.ConfigurationLoaded.ToString(),
AllowReload = devSum.AllowDataReload.ToString(),
DataGroup = devSum.DataGroup.Name,
ManagementGroup = devSum.ManagementGroup.Name,
};
我认为这应该工作,但它抛出一个错误,如果有一个空的外键在链接到数据组或管理组实体。
我如何解决这个问题,所以它会像一个外部连接并返回null?
这可能有点难看,但您可以使用三元操作符:
DeviceType = devSum.DeviceType != null ? devSum.DeviceType.Name : null,
你可能需要做一个Include
var devSum = repository.Devices
.Include("DeviceType")
.Include("ManagementGroup")
.Where(dev => dev.Id == deviceId)
.SingleOrDefault();
将以上代码改为
var devSum = repository.Devices .Where(dev => dev.Id == deviceId) .FirstOrDefault();