При использовании внутреннего соединения выбрасывает NullReferenceException - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть следующая модель базы данных: db scheme.

Я хочу получать выбранный список сообщений категории.Я получаю список программ по категориям следующим образом:

var pre_request = from el in db.programs
                  where el.program_categories.Any(n => n.categories.slug_name == categ)
                  select el.id;
var programCat = pre_request.ToList();

Он работает правильно.Для того, чтобы получать список сообщений, я использую INNER JOIN следующим образом:

var request = (from c in db.posts
               join c2 in programCat on c.program_id equals c2
               orderby c.id descending
               select new ListItem
               {
                Name = c.name,
                Id = c.id,
                Poster = c.images.FirstOrDefault(n => n.type == "post").href,
               }).Skip(0).Take(1);
List<ListItem> content = request.ToList();

Когда я запускаю это приложение, он возвращает NullReferenceException в строке

List<ListItem> content = request.ToList();

Почему возвращается NullReferenceException?Как получить список выбранных по категориям сообщений?

1 Ответ

0 голосов
/ 14 декабря 2018

Ваша ошибка в строке:

Poster = c.images.FirstOrDefault(n => n.type == "post").href,

Вы использовали FirstOrDefault вместо First, потому что вы подумали: «Когда такого изображения может не быть, в таком случае давайте использовать нуль».Если он возвращает значение NULL, то, конечно, вы не можете получить .href.

. При использовании LINQ хорошей практикой является сохранение содержимого IQueryable / IEnumerable как можно дольше.Только последнее утверждение должно материализовать ваши вещи в объект List / Dictionary / One:

Poster = c.images.Where(image => image.type == "post")
                 .Select(image => image.href)
                 .FirstOrDefault(),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...