У меня следующая структура таблиц
TableA -> TableB (FK с таблицей A) -> TableC (FK с таблицей B)
TableX -> TableY (FK с таблицей X идругой FK с таблицей C)
Я использую платформу .NET core EF и сгенерированные классы, нет прямой связи между классами TableC и TableX
public partial class TableA
{
public TableA()
{
TableB = new HashSet<TableB>();
}
public int Id { get; set; }
public string Email { get; set; }
public ICollection<TableB> TableB { get; set; }
}
public partial class TableB
{
public TableB()
{
TableC = new HashSet<TableC>();
}
//Other prop
public Users tableA { get; set; }
public ICollection<TableC> tableC { get; set; }
}
public partial class TableC
{
public TableC()
{
tableY = new HashSet<TableY>();
}
//Other prop
public TableB tableB { get; set; }
public ICollection<TableY> tableY { get; set; }
}
public partial class TableY
{
//Other prop
public TableC tableC { get; set; }
public TableX tableX { get; set; }
}
public partial class TableX
{
public TableX()
{
tableX = new HashSet<TableX>();
}
//Other prop
public ICollection<TableX> tableX { get; set; }
}
Я использую запрос ниже
_context.TableA.Where(x => x.Email == email.Trim())
.Include(i => i.TableB )
.ThenInclude(k => k.TableC)
.ThenInclude(l => l.TableY)
Я скучаю по TableX из цепочки объектов и ищу запрос, который может сделать TableX дочерним объектом TableC, как показано ниже
TableA -> TableB -> TableC -> TableX -> TableY
, когда я использую запрос ниже
_context.TableA.Where(x => x.Email == email.Trim())
.Include(i => i.TableB )
.ThenInclude(k => k.TableC)
.ThenInclude(l => l.TableY.Select(g => g.tableX))
Я получаю ошибку
ArgumentException: лямбда-выражение свойства Include 'p => p.Бронирование недействительно.Выражение должно представлять доступ к свойству: 't => t.MyProperty'.Чтобы нацелить навигацию, объявленную на производные типы, укажите лямбда-параметр с явно заданным типом целевого типа, например, «(Derived d) => d.MyProperty».