@hax
junior developer

Как загрузить вложенные свойства через EF Core с помощью Expression?

Такая ситуация: есть метод ListAsync в методе репозитория, примерно реализован вот так:
public virtual async Task<IEnumerable<TEntity>> ListAsync(
            params Expression<Func<TEntity, object>>[] includeProperties)
        {
            IQueryable<TEntity> query = this.QueryableEntities;
 
            if (includeProperties != null)
            {
                foreach (Expression<Func<TEntity, object>> includeProperty in includeProperties)
                {
                    query = query.Include(includeProperty);
                }
            }
 
            return await query.AsNoTracking().ToListAsync();
        }


Параметр includeProperties говорит какие вложенные свойства нужно тоже загрузить. Есть у меня ещё три сущности:
class Image
{
        public Guid ImageGuid { get; set; }
 
        public List<ImageTag> ImageTags { get; set; }
}
 
class ImageTag
{
        public Guid ImageGuid { get; set; }
 
        public Image Image { get; set; }
 
        public int TagId { get; set; }
 
        public Tag Tag { get; set; }
}
 
class Tag
{
        public int TagId { get; set; }
 
        public string Name { get; set; }
 
        public List<ImageTag> ImageTags { get; set; }
}


Теперь я хочу загрузить список всех Image. Через ImageRepository пишу следующий код:
imageRepository.ListAsync(
   (img) => img.ImageTags.Select(t => t.Tags));


Но данная реализация выкидывает исключение: Lambda expression used inside Include is not valid. Подскажите, пожалуйста, как правильно реализовать загрузку вложенных свойств без ThenInclude в EF Core?
  • Вопрос задан
  • 248 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы