使用内部联接时,抛出NullReferenceException

时间:2018-12-14 14:40:36

标签: c# entity-framework linq

我有下一个数据库模型: 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 :(得分:0)

您的错误在一行中:

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

您使用FirstOrDefault代替了First,因为您认为:“何时,可能没有这样的图像,在这种情况下,请使用null”。如果返回null,则当然无法获得.href

使用LINQ时,最好使IQueryable / IEnumerable保持尽可能长的时间。实际上,只有最后一条语句才能将您的内容具体化为一个列表/字典/一个对象:

Poster = c.images.Where(image => image.type == "post")
                 .Select(image => image.href)
                 .FirstOrDefault(),