Создание повторно используемых выражений включения в Entity Framework - PullRequest
0 голосов
/ 28 сентября 2019

Я использую 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 для свойств навигации коллекции.Имя параметра: путь

Есть ли способ сделать эту работу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...