IQueryable условно включает - PullRequest
       12

IQueryable условно включает

0 голосов
/ 27 февраля 2019

У меня есть несколько классов:

public Department {
  public HashSet<Employee> Managers {get; set;}
  public HashSet<Employee> Workers {get; set;}
  public HashSet<Asset> Assets {get; set;}
}

Я использую IQueryable для получения коллекции отделов:

IQueryable<Department> deparments = Context.Department.Where (
dept => dept.CompanyId = id)
.include (dept.Managers.Where (emp => emp.level == Position.Manager) as Managers)
.include (dept.Workers.Where (emp => emp.level == Position.Worker) as Workers)
.include (dept.Asset)

Он выдал ошибки при выполнении запроса.Как правильно это сделать?Вот сообщение об ошибке:

"Лямбда-выражение свойства Include 'dept => {из empee Employee в dept.Employee где ([emp] .Position == Position.Manager) выберите [emp]} 'недопустимо. Выражение должно представлять свойство access:' t => t.MyProperty '. Чтобы нацеливать навигацию, объявленную на производные типы, укажите явно лямбда-параметр целевого типа с явно заданным типом, например Eg' (Derived d) => d.MyProperty '.

Для получения дополнительной информации о включении связанных данных см. http://go.microsoft.com/fwlink/?LinkID=746393."

1 Ответ

0 голосов
/ 27 февраля 2019

Поскольку ваши свойства Managers и Workers являются прямыми потомками класса Department, и вы не ссылаетесь на Department в классе Employee, поэтому вы не можете использовать Include() для этой цели.

Я думаю, вы должны сделать это с помощью подзапросов.

var query = (from d in Contex.Department
             where d.CompanyId == id
             select new Department{
                 Managers = d.Managers.where(m => m.level == Position.Manager),
                 Workers = d.Workers.where(w => w.level == Position.Worker),
                 Asset = d.Assets,
             });

Надеюсь, это решит вашу проблему.

...