LINQ: группировка на основе свойства в подсписке

Я пытаюсь использовать LINQ для создания сгруппированного списка документов на основе метаданных, которые являются списком в документе.

Вот как выглядит моя структура объекта:

List<Document>
         --> List<Metadata>
                      --> Metadata has a name and a value property.

Я хочу сгруппировать документы на основе тега метаданных, который имеет имя: ID, и сгруппировать их там, где значения свойства ID совпадают.

Я пробовал это следующим образом:

var x = response.Document
         .GroupBy(d => d.Metadata.Where(dc => dc.Name == DocProperty.ID)
         .Select(dc => dc.Value));

Это приводит к список отдельных документов, но не сгруппированных по идентификатору.

Также подумал о выборе отдельного списка идентификаторов, а затем просмотреть список документов и найти документы, соответствующие идентификатору. Это похоже на большие накладные расходы, потому что для каждого идентификатора в отдельном списке я должен каждый раз заходить в список метаданных и находить документы, а также выполнять дополнительные проверки для нескольких найденных элементов, получать нужное мне свойство и т. Д.

Кто-нибудь знает, как заставить эту штуку работать?

10
задан Marc Gravell 10 March 2011 в 10:07
поделиться