Linq to sql: свойства свойств, которые могут быть нулевыми - PullRequest
3 голосов
/ 10 марта 2009

Простой запрос 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 ]

3 голосов
/ 10 марта 2009

Я обычно просто использую 'let'.

from x in Foo
let y = x.Bar
where y != null
select y.Baz;

UPDATE:

Я думаю, что ?? оператор переводит в SQL.

3 голосов
/ 11 марта 2009

Если внешний ключ в Transports обнуляется, вам нужно проверить этот столбец на ноль, прежде чем пытаться получить объект CurrentLocation.

Вы могли бы сделать что-то вроде этого:

CurrentLocation = transport.currentLocationId != null ? transport.CurrentLocation : null;
1 голос
/ 10 марта 2009

Просто сделайте (вы используете неправильное свойство):

transport.CurrentLocation == null? null: transport.CurrentLocation.Carriers

Обновление 1: Это странно, я использовал несколько довольно сложных запросов и не сталкивался с этой проблемой. Я только что проверил один, не думаю, что это имеет значение, но мой поменял чек:

transport.CurrentLocation! = Null? transport.CurrentLocation.Carriers: null;

Можете ли вы опубликовать полный запрос, который вы пробовали, который дает исключение синтаксического анализа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...