После некоторых исследований я нашел решение для EF 6 нравится передавать x.Users.Select(u => u.Posts), но для EF Core 8 он не работает и выдает это исключение:
Выражение «x.Users.AsQueryable().Select(u => u.Posts)» недопустимо внутри операции «Include», поскольку оно не представляет доступ к свойству: 't => t .MyProperty'`
Также я подумал о получении строки Users.Posts для передачи в Include() из func x = > x.Users.Select(u => u.Posts), но не получил его.
Общий метод абстрактного универсального репозитория:
Код: Выделить всё
protected T? GetById(int id, params Expression[] includes)
=> Entities
.IncludeAll(includes)
.FirstOrDefault(x => x.Id == id);
Код: Выделить всё
public static IQueryable IncludeAll(this IQueryable entities, Expression[]? includes)
where T : Entity, new()
{
if (includes is null)
{
return entities;
}
entities = includes.Aggregate(entities,
(current, include) => current.Include(include));
return entities;
}
Код: Выделить всё
public override Topic? GetById(int id)
{
return base.GetById(id, x => x.Users.Select(u => u.Posts));
}
Или как я могу изменить свой метод расширения IncludeAll(), чтобы получить строку «Users.Posts» для передачи в Include() из func x => x.Users .Select(u => u.Posts).
PS: в этом примере сущность Topic содержит свойство List Users. Объект User имеет свойство List
Posts.
Я пытался найти те же проблемы, но не нашел их.
Подробнее здесь: https://stackoverflow.com/questions/784 ... ludethen-i