Как отобразить дедушку и бабушку, когда задано значение «childItemNo».
Ниже приведена моя модель: любая запись (ItemNo) может стать прародителем, родителем или дочерним элементом.
public partial class item
{
public string ItemNo { get; set; }
public string ParentItemNo { get; set; }
}
Приведенный ниже запрос возвращает родителя, когда задано значение childItemNo: хотелось бы также отобразить дедушку и бабушку.
var result = DbContext.ItemTables.Where(p => p.ItemNo== childItemNo).Select(p => p.ParentItemNo).ToListAsync();
Спасибо.





Если у вас есть свойства навигации, это тривиально:
Select(c => c.Parent.ParentItemNo)
Без них вы могли бы стать немного более грязным:
Select(c => DbContext.ItemTables.First(p => p.ItemNo == c.ParentItemNo).ParentItemNo)
Или используйте соединение
(from ch in db.ItemTables
join pa in db.ItemTables
on ch.ParentItemNo equals pa.ItemNo
where ch.ItemNo == childItemNo
select pa.ParentItemNo).First()
Или в синтаксисе метода:
db.ItemTables.Where(ch => ch.ItemNo == childItemNo).Join(
db.ItemTables,
l => l.ParentItemNo, //left is the child
r => r.ItemNo, //right is the parent
(l, r) => r.ParentItemNo //want the parent's parent
).First();
Если у вас есть свойства навигации, это тривиально:
Select(c => c.Parent.ParentItemNo), без них чуть более грязно:Select(c => DbContext.ItemTables.First(p => p.ItemNo == c.ParentItemNo).ParentItemNo). Ставим навигационные реквизиты; так EF упрощает жизнь