Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果外键为null,则在linq查询中使用导航属性会引发错误_C#_Linq_Linq To Entities - Fatal编程技术网

C# 如果外键为null,则在linq查询中使用导航属性会引发错误

C# 如果外键为null,则在linq查询中使用导航属性会引发错误,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我认为这应该是可行的,但如果指向datagoups或managementGroup实体的链接中的外键中存在null,则会引发错误 如何解决这个问题,使其像外部联接一样运行并返回null?它可能有点难看,但您可以使用三元运算符来实现这一点: var devSum = repository.Devices .Where(dev => dev.Id == deviceId) .SingleOrDefault(); vmDevice

我认为这应该是可行的,但如果指向datagoups或managementGroup实体的链接中的外键中存在null,则会引发错误


如何解决这个问题,使其像外部联接一样运行并返回null?

它可能有点难看,但您可以使用三元运算符来实现这一点:

 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,
        };

使用此命令更改上述代码

DeviceType = devSum.DeviceType != null ? devSum.DeviceType.Name : null,

您可能需要执行一个
包含

var devSum = repository.Devices .Where(dev => dev.Id == deviceId) .FirstOrDefault();

是的,但我想避免这样,林克肯定能做到。不,对不起,这差不多就是它。你总是负责检查空值。我感谢你的帮助,格兰特,但仅仅因为我们都不知道答案并不意味着没有答案。@DavidB我不是说我不知道,我是说我知道答案:它是“不”。哈哈,好吧,很公平。我同意这个。看起来很奇怪。然后你必须接受格兰特·托马斯的答案。如果关系是集合,我们可以使用
DefaultIfEmpty()
,它将相当于外部联接。谢谢,我将签出DefaultIfEmpty如果ManagementGroup对象(记录)simple的相关数据组不存在,那么Linq无法为您提供该对象(或空对象)。你得自己填。
var devSum = repository.Devices
            .Include("DeviceType")
            .Include("ManagementGroup")
            .Where(dev => dev.Id == deviceId)
            .SingleOrDefault();