У меня есть следующие модели
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
public List<PersonRole> PersonRoles { get; set; }
}
public class RoleInDuty
{
public int roleInDutyId { get; set; }
public string Name { get; set; }
public int typeOfDutyId { get; set; }
public TypeOfDuty typeOfDuty { get; set; }
public List<PersonRole> PersonRoles { get; set; }
}
public class PersonRole
{
public int PersonId { get; set; }
public Person Person { get; set; }
public int RoleInDutyId { get; set; }
public RoleInDuty RoleInDuty { get; set; }
}
И теперь я могу загрузить всех людей со всеми их ролями, используя следующий код:
var people = _context.Persons
.Include(p => p.PersonRoles)
.ThenInclude(e => e.RoleInDuty).ToList();
Но я не хочу загружать все данныеСписок, мне нужно загрузить PersonRole в соответствии с введенным typeOfDutyId.Я пытаюсь решить эту проблему с помощью следующего кода
people = _context.Persons
.Include(p => p.PersonRoles
.Where(t=>t.RoleInDuty.typeOfDutyId == Id)).ToList();
Но ошибка выброса VS
InvalidOperationException: лямбда-выражение свойства Include 'p => {из PersonRole t в p.PersonRoles, где ([t] .RoleInDuty.typeOfDutyId == __typeOfDuty_typeOfDutyId_0) select [t]} 'недопустимо.Выражение должно представлять доступ к свойству: 't => t.MyProperty'.Чтобы нацелить навигацию, объявленную на производные типы, укажите лямбда-параметр с явно заданным типом целевого типа, например, «(Derived d) => d.MyProperty».Для получения дополнительной информации о включении связанных данных см. http://go.microsoft.com/fwlink/?LinkID=746393.
Как я понимаю, я не могу получить доступ к свойству RoleInDuty.typeOfDutyId , потому что я его пока не включаю.
Я решил эту проблему с помощью следующего кода
people = _context.Persons
.Include(p => p.PersonRoles)
.ThenInclude(e=>e.RoleInDuty).ToList();
foreach (Person p in people)
{
p.PersonRoles = p.PersonRoles
.Where(e => e.RoleInDuty.typeOfDutyId == Id)
.ToList();
}