简单的LINQ查询:
from transport in db.Transports
select new
{
Current = transport.CurrentLocation,
CurrentCarriers = transport.CurrentLocation.Carriers,
};
问题:CurrentLocation
可能为空。如果是,则执行此查询会抛出NullReference。我尝试添加支票
transport.CurrentLocation == null ? null : transport.CurrentLocation.Carriers
但Linq to sql似乎无法解析它。
任何不需要为每个传输发送额外查询的好解决方案?
答案 0 :(得分:3)
我通常只是使用'let'。
from x in Foo
let y = x.Bar
where y != null
select y.Baz;
更新:
我觉得??运算符确实转换为SQL。
答案 1 :(得分:3)
如果Transports上的外键可以为空,那么在尝试获取CurrentLocation对象之前,必须先检查该列是否为null。
你可以这样做:
CurrentLocation = transport.currentLocationId != null ? transport.CurrentLocation : null;
答案 2 :(得分:1)
做(你在哪里使用错误的属性):
transport.CurrentLocation == null? null:transport.CurrentLocation.Carriers
更新1:这很奇怪,我使用了一些非常复杂的查询,并没有遇到这个问题。我刚刚检查了一个,不认为这很重要,但是我的检查是倒置的:
transport.CurrentLocation!= null? transport.CurrentLocation.Carriers:null;
您是否可以发布您尝试过的完整查询,为您提供解析异常?