Используя EF 6, я передаю операторы включения в свой репозиторий в виде выражения , что-то вроде этого:
Код: Выделить всё
Expression[] getCompaniesIncludeExpressions =
{
e => e.Categories.Select(c => c.Projects.Select(d => d.Jobs.Select(f => f.Location))),
e => e.CompanyUsers
};
Код: Выделить всё
public async Task SelectAllAsync(Expression[] includeExpressions, Expression whereExpression)
{
var entities = Context.Set().AsQueryable();
if (includeExpressions != null)
{
foreach (var includeExpression in includeExpressions)
{
entities = entities.Include(includeExpression);
}
}
if (whereExpression == null) return await entities.ToListAsync();
var list = await entities
.Where(whereExpression).ToListAsync();
return list;
}
AggregateException: произошла одна или несколько ошибок. (Выражение 'e.Categories.AsQueryable().Select(c => c.Projects.AsQueryable().Select(d => d.Jobs.AsQueryable().Select(f => f.Location)))' недействителен внутри операции «Включить», поскольку он не представляет доступ к свойству: «t => t.MyProperty». Чтобы настроить навигацию, объявленную в производных типах, используйте приведение ('t => ((Derived)t).MyProperty. ') или оператор 'as' ('t => (t as Derived).MyProperty'). Доступ к навигации по коллекции можно фильтровать, создавая операции Where, OrderBy(Descending), thenBy(Derived), Skip или Take.
Как мне реорганизовать это, чтобы передать выражение и включить дочерние свойства с помощью thenInclude?
Спасибо заранее
Подробнее здесь: https://stackoverflow.com/questions/788 ... -statement
Мобильная версия