Я получаю сообщение о возможном исключении NullReferenceException, которое является правильным.
Не ясно, какая система создает это сообщение. Resharper?
В любом случае, в этом случае, если это действительно LINQ to Entities, предупреждение является ложным.
LINQ to Entities во многих случаях выполняет автоматическое «глубокое слияние нулей», и это один из таких случаев.
В вашем исходном запросе:
var articles = context.Articles
.Where(a => a.Id != articleId)
.OrderBy(p => p.Categories
.OrderBy(q => q.Name)
.FirstOrDefault()
.Name)
.ToList();
... не будет NullReferenceException
, если у статьи нет связанной с ней категории. Вместо этого значение заказа будет приниматься за null
для таких статей (то есть, статьи без категорий будут появляться первыми), что, по-видимому, именно то, что вам нужно. Так что никаких дополнительных усилий с вашей стороны не требуется!
Обратите внимание, что с другими поставщиками LINQ (такими как LINQ to Objects) поведение может быть совершенно другим, и .FirstOrDefault().XXX
действительно является рискованным выражением.
С другой стороны, не оптимизируйте преждевременно. Если у вас уже есть рабочее решение, сравните его. Если это слишком медленно, выясните , почему - в этом случае ключи находятся в сгенерированном SQL. Оптимизатор запросов LINQ to Entities часто бывает умнее, чем вы думаете. :)