C# 如果外键为null,则在linq查询中使用导航属性会引发错误
我认为这应该是可行的,但如果指向datagoups或managementGroup实体的链接中的外键中存在null,则会引发错误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
如何解决这个问题,使其像外部联接一样运行并返回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();