Как отобразить дедушку и бабушку, когда ребенок дан

Как отобразить дедушку и бабушку, когда задано значение «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). Ставим навигационные реквизиты; так EF упрощает жизнь

Caius Jard 12.05.2022 07:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у вас есть свойства навигации, это тривиально:

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();

Другие вопросы по теме