У меня есть вложенные родительские и дочерние таблицы. Вот моя модель:
public class Categories
{
[Key]
public int CategoriesId { get; set; }
public int Order { get; set; }
public string CategoryName { get; set; }
public List<News> News { get; set; }
}
public class News
{
[Key]
public int NewsId { get; set; }
public int CategoriesId { get; set; }
public string Content { get; set; }
public DateTime Date { get; set; }
...
public List<Comments> Comments { get; set; }
public Categories Categories { get; set; }
}
public class Comments
{
[Key]
public int CommentsId { get; set; }
public int NewsId { get; set; }
public string Comment { get; set; }
...
public News News { get; set; }
}
public class NewsImages
{
[Key]
public int ImageId { get; set; }
public int NewsId { get; set; }
public string ImageUrl { get; set; }
public bool Cover { get; set;}
...
public News News { get; set; }
}
Я пытаюсь отправить его из ViewComponent в View;
public async Task<IViewComponentResult> InvokeAsync()
{
var group = _dbContext.Categories.Where(k => k.Order != 0).OrderBy(h => h.Order)
.Select(c => new
{
C = c,
N = c.News.OrderByDescending(n => n.Date).Take(5)
.Select(r => new
{
Y = r.Comments,
R = r.NewsImages.Where(rs => rs.Cover == true).FirstOrDefault()
})
});
var model = group
.Select(m => m.C);
return View(await model.ToListAsync()) ;
}
Я уверен, что записей новостей достаточно для каждой категории, но я получаю ошибка: ArgumentNullException: значение не может быть нулевым. (Параметр 'источник') AspNetCore.Views_Shared_Components_IndexKategori_Default.ExecuteAsyn c () в Default.cs html
var bp = k.News.FirstOrDefault ();
, если я использую этот код, работает нормально:
var model = _dbContext.Categories
.Include(h => h.News).ThenInclude(h => h.Comments)
.Include(h => h.News).ThenInclude(h => h.NewsImages)
.Where(h => h.Order != 0)
.OrderBy(h => h.Order)
Но когда я использую приведенный выше код, для некоторых категорий появляется несколько записей, а некоторые категории реагируют так, как будто их нет.
Где я делаю ошибки? Заранее спасибо за тех, кто помог ..