У меня есть файл конфигурации XML, который содержит список документов с картами полей для каждого документа. Я хочу использовать LINQ to XML для заполнения внутренней структуры данных, которая представляет документы в виде иерархии структур List <>.
Атрибут «Включить» определяет, следует ли включать поле.
Вот пример того, как выглядит XML:
<Documents>
<Document Include="1" DocumentName="Report1" >
<Field Include="1" OldName="Old1" NewName="New1"/>
<Field Include="1" OldName="Old2" NewName="New2"/>
<Field Include="0" OldName="Old3" NewName="New3"/>
</Document>
<Document Include="1" DocumentName="Report2" >
<Field Include="1" OldName="Old1" NewName="New1"/>
<Field Include="0" OldName="Old3" NewName="New3"/>
</Document>
</Documents>
Структура данных, представляющая документы, выглядит следующим образом:
class FieldMap
{
public string OldName { get; set; }
public string NewName { get; set; }
}
class Document
{
public string DocumentName { get; set; }
public List<FieldMap> FieldMaps;
}
private List<Document> Documents;
Ниже приведен код, который выполняет первую часть путем заполнения документов:
var ds = from row in elem.Descendants("Document")
where row.Attribute("Include").Value == "1"
select new Document
{
DocumentName = row.Attribute("DocumentName").Value,
};
Documents = ds.ToList<Document>();
Я хотел бы изменить приведенный выше код, чтобы он также заполнял структуру списка в каждом документе. Я знаю, что мог бы сделать это, перебирая список документов <> и выполняя еще один запрос LINQ в цикле, однако я бы предпочел сделать все как консолидированный запрос.