Поведение сущностей немного отличается от поведения LINQ для объектов, связанных с левыми внешними объединениями, как вы узнали здесь.Вы все еще можете заставить его работать с очень легкой настройкой.Хитрость заключается в предоставлении выражения соединения, которое позволяет избежать разыменования null
.
Моя первая попытка была у меня с выражением соединения:
on (rn == null : Int32.MinValue : rn.RegionID) equals erL.ID into erLeft
Меньше, чем удовлетворяющее, так как Int32.MinValue
похоже на этоявляется как произвольным значением, так и потому, что оно может быть допустимым значением RegionID в зависимости от вашего использования.Другой вариант - использовать обнуляемое целое число, которое я считаю более удовлетворительным, поскольку оно дает тот же результат без угона случая Int32.MinValue
.
on (rn == null ? (Int32?) null : rn.RegionID) equals erL.ID into erLeft
Теперь изменив ИЛИ (|
) в следующем условном выражениидля короткого замыкания (||
) следующим образом:
where rn==null || (rn.ID==n.ID && er!=null)
Вместо NullReferenceException
вы должны получить один результат News, RegionID сейчас, как и ожидалось.