Я использую Entity Framework и у меня есть запрос сотрудника, где я использую Include
для загрузки свойств навигации в одном запросе к базе данных.
Я хочу загрузить те же сущности при записизапрос для субъекта компании.(Компания -> Отделы -> Сотрудники), в которую будут включены данные сотрудника.
Чтобы не повторять тот же код Include
, я попытался использовать следующий метод расширения:
public static class EmployeeDetailsIncluder
{
static Func<Employee, IEnumerable<IEnumerable<IEnumerable<ICollection<nav8Type>>>>> employeeFunc =
employee => employee.nav1.nav2s
.Select(n2 => n2.nav3.nav4s
.Select(n4 => n4.nav5.nav6s
.Select(n6 => n6.nav7.nav8s)));
public static IQueryable<Company> IncludeEmployeeData(this IQueryable<Company> companyQuery)
{
Expression<Func<Company, IEnumerable<IEnumerable<IEnumerable<IEnumerable<IEnumerable<ICollection<nav8Type>>>>>>>> includer = company => company.Departments.Select(dept => dept.Employees.Select(employeeFunc));
return companyQuery.Include(includer.Expand());
}
}
Я знал, что создание выражений из Func
s в Entity Framework вызывает проблемы с точки зрения деревьев выражений, поэтому я также попытался использовать функцию Expand
из LinqKit.Но я все еще получаю следующую ошибку:
Выражение «Включить путь» должно ссылаться на свойство навигации, определенное для типа.Используйте пунктирные пути для ссылочных свойств навигации и оператор Select для свойств навигации коллекции.Имя параметра: путь
Есть ли способ сделать эту работу?