Получение элементов с третьего уровня списка через linq

Кто-нибудь знает, как я получаю, а IEnumerable формирует следующий запрос?

var neueLieferanten = Bestellpositionen.Where(x => x.SelectedArtikel is not null)
   .Select(x => x.SelectedArtikel)
   .Select(y => y.LieferantenArtikel.Select(x => x.Lieferant));

Первый класс имеет свойство SelectedArtikel, которое является еще одним классом, содержащим список LieferantenArtikel. У каждого из этих объектов есть объект с именем Lieferant, который мне нужен.


person Marvin Klein    schedule 13.10.2020    source источник
comment
Отвечает ли это на ваш вопрос? Сведение списка в LINQ   -  person gunr2171    schedule 13.10.2020


Ответы (1)


Из того, что вы описываете:

var neueLieferanten = Bestellpositionen.Where(bp => bp.SelectedArtikel != null)
  .SelectMany(bp => bp.SelectedArtikel.LieferantenArtikel) 
  .Select(la => la.Lieferant);

SelectMany принимает, например. 10 List<LieferantenArtikel> внутри 10 Bestellpositionen.SelectedArtikel и превращает их в единый Список LieferantenArtikel, из которого Select затем извлекает свойство Lieferant

Вы можете структурировать его немного по-другому для того же результата:

var neueLieferanten = Bestellpositionen.Where(bp => bp.SelectedArtikel != null)
  .SelectMany(bp => bp.SelectedArtikel.LieferantenArtikel 
    .Select(la => la.Lieferant)
  );

Я представил это таким образом, чтобы подчеркнуть, что на самом деле единственное изменение - это положение скобки. Мы либо превращаем список списков в один список, а затем извлекаем свойство, либо мы извлекаем свойство из списка в список, а затем превратить его в единый список; используйте тот способ, который больше нравится вашему пониманию (я предпочитаю первый)

person Caius Jard    schedule 13.10.2020