У меня есть метод, который создает большое лямбда-выражение на основе входящих параметров (фильтр для запроса базы данных, Entity Framework v. 1.0).Допустим, у нас есть сущности Person, Department и Occation.Человек может иметь Профессии, и Профессия принадлежит Департаменту.
Вот код:
var query = myDbContext.AsQueryable();
query = query.Persons.Where(.......) //Building some conditions
...
... //Adding conditions to the query if there are incoming params
Проблема заключается в следующем фрагменте:
//We have a Department Id as parameter, so we want to filter persons whose Occupations belong to this Department
query = query.Where(per => per.Occupations.Where(occ => !occ.IsDeleted).Count(occ => occ.Department.Id == myFilterParameter) > 0;)
Этоработает нормально, но при рефакторинге предиката для команды Count () из выражения, например, так:
Expression<Func<Occupation, bool>> countExpression = occ => occ.DepartmentId == myFilterParameter;
query = query.Where(per => per.Occupations.Where(occ => !occ.IsDeleted).Count(countExpression.Compile()) > 0);
Это вызывает
Внутренняя ошибка поставщика данных .NET Framework 1025.
Есть идеи, почему так происходит?
Я пробовал также:
query = query.Where(per => per.Occupations.Where(occ => !occ.IsDeleted).AsQueryable().Count(countExpression.Compile()) > 0), the same picture.
Любая помощь будет очень заметной.