Linq to sql:属性的属性,可以为null

时间:2009-03-10 15:39:10

标签: c# linq-to-sql

简单的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似乎无法解析它。

任何不需要为每个传输发送额外查询的好解决方案?

3 个答案:

答案 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;

您是否可以发布您尝试过的完整查询,为您提供解析异常?