Выражение вложенного списка Linq

#c# #linq #lambda #linq-to-objects

#c# #linq #лямбда #linq-to-objects (привязка к объектам)

Вопрос:

пожалуйста, мне нужна ваша помощь с выражением Linq:

У меня есть вложенные объекты со списками, вот как выглядит иерархия основных объектов (каждая черточка является атрибутом подкласса):

 Folder
-name
-List<Subfolder> Subfolders
                 -name
                 -List<Document> Documents
                                 -name
                                 -key
  

Имея эту иерархию объектов, у меня есть имя документа, и я хочу выполнить поиск по нему и вернуть его родительскую папку (вложенную папку)

Пример:

 Folder
    -name: Customer
    -List<Subfolder> Subfolders
                     -name: Personal
                     -List<Document> Documents
                                     -name: Resume
                                     -key : 1
  

Если бы я сказал: «Возобновить», выражение linq должно было бы вернуть мне: вложенную папку «Personal» (объект).

Пожалуйста, помогите мне, из-за двух вложенных списков у меня проблемы, с одним это будет легко.

Заранее спасибо.

Ответ №1:

 folders
    .SelectMany(s => s.SubFolders)
    .FirstOrDefault(s => s.Documents.Any(d => d.Name == "Resume"));
  

Я здесь начинаю с нуля, но я думаю, что это должно сработать….

Ответ №2:

Это просто:

 var folders = ...;

var subfolders =
    from folder in folders
    from subfolder in folder.Subfolders
    where subfolder.Documents.Any(d => d.Name == "Resume")
    select subfolder;
  

Подумайте о LINQ!