Вывод определенного атрибута в операторе ThenInclude (EFCore)

#c# #sql #entity-framework-core #include

#c# #sql #сущность-фреймворк-ядро #включить

Вопрос:

После подключения нескольких таблиц с помощью Include я хочу добавить только атрибут ‘Name’ из таблицы ‘Tag’

 var result = context.RssChannels
                    .Include(rsschannel => rsschannel.Articles)
                        .ThenInclude(arttag => arttag.ArticleTags)
                            .ThenInclude(tag => tag.Tag.Name)
                    .Include(rsschannel => rsschannel.Articles)
                        .ThenInclude(Rating => Rating.Rating)
                            .ToList();
 

введите описание изображения здесь

 public partial class Tag
    {
        public Tag()
        {
            ArticleTags = new HashSet<ArticleTag>();
        }

        public int Id { get; set; }
        public string Name { get; set; }

        public virtual ICollection<ArticleTag> ArticleTags { get; set; }
    }
 

Можно ли добавлять только отдельные атрибуты из связанной таблицы

Ответ №1:

Метод ThenInclude должен использоваться только для включения свойств навигации, поэтому, если вы хотите указать одно свойство из свойства навигации, вы должны создать Select перед материализацией (это означает, перед вызовом некоторых методов FirstOrDefault , SingleOrDefault , ToList , и т.д.).

Кроме того, если вы используете Select метод, вам не нужно использовать Include , потому что ядро ef автоматически использует нетерпеливую загрузку, когда используются некоторые проекции данных, подобные Select ;