IEnumerable.Select() внутри DbSet<>.Include() вместо DbSet<>.IncludeThen() в EF Core 8C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 IEnumerable.Select() внутри DbSet<>.Include() вместо DbSet<>.IncludeThen() в EF Core 8

Сообщение Anonymous »

Я пытаюсь определить абстрактный репозиторий, дочерние элементы которого будут передаваться в список методов GetById() Func для управления включениями различного уровня. Итак, мне нужно передать свойство второго уровня T, чтобы включить это вместо ручного использования метода .IncludeThen().
После некоторых исследований я нашел решение для 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);
Метод расширения IncludeAll():

Код: Выделить всё

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));
}
Пожалуйста, помогите мне понять, почему мой код останавливается с таким исключением и как я могу предоставить доступ к свойству List внутри свойства List для метода Include().
Или как я могу изменить свой метод расширения 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Фатальная ошибка: include/chrono: Нет такого файла или каталога 14 | #include <хроно>
    Anonymous » » в форуме C++
    0 Ответы
    97 Просмотры
    Последнее сообщение Anonymous
  • #include <> и #include "" [дубликат]
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Как использовать выпадающую стрелку, чтобы показать список редакторов Ag Grid Select Select Select
    Anonymous » » в форуме Javascript
    0 Ответы
    95 Просмотры
    Последнее сообщение Anonymous
  • Как объединить два IEnumerable в новый IEnumerable?
    Гость » » в форуме C#
    0 Ответы
    48 Просмотры
    Последнее сообщение Гость
  • Что необходимо передать для IEnumerable>>?
    Anonymous » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»