如果外键为空,在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?

如果外键为空,在linq查询中使用导航属性会抛出错误

这可能有点难看,但您可以使用三元操作符:

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();