В настоящее время я получаю список HeaderColumns из следующего фрагмента XML:
<PerformancePanel>
<HeaderColumns>
<column performanceId="12" text="Over last month %" />
<column performanceId="13" text="Over last 3 months %" />
<column performanceId="16" text="1 Year %" />
<column performanceId="18" text="3 Years % p.a." />
<column performanceId="20" text="5 Years % p.a." />
<column performanceId="22" text="10 Years % p.a." />
</HeaderColumns>
</PerformancePanel>
из которого я создаю объект следующим образом: (восхитительно похож на предыдущий вопрос!)
var performancePanels = new
{
Panels = (from panel in doc.Elements("PerformancePanel")
select new
{
HeaderColumns = (from column in panel.Elements("HeaderColumns").Elements("column")
select new
{
PerformanceId = (int)column.Attribute("performanceId"),
Text = (string)column.Attribute("text")
}).ToList(),
}).ToList()
};
Я бы хотел, чтобы HeaderColumns был Dictionary (), поэтому позже я извлекаю значения из анонимного объекта следующим образом:
Dictionary<int, string> myHeaders = new Dictionary<int, string>();
foreach (var column in performancePanels.Panels[0].HeaderColumns)
{
myHeaders.Add(column.PerformanceId, column.Text);
}
Я думал, что смогу добиться этого с помощью Linq to XML с чем-то похожим на это
HeaderColumns = (from column in panel.Elements("HeaderColumns").Elements("column")
select new Dictionary<int, string>()
{
(int)column.Attribute("performanceId"),
(string)column.Attribute("text")
}).ToDictionary<int,string>(),
но это не работает, потому что
- ToDictionary () нужен параметр Func, и я не знаю,
что это такое / как это реализовать,
и
- код, вероятно, неверен в любом случае!
Может кто-нибудь подсказать, как мне добиться нужного мне результата? Благодарю.
Редактировать: Я пытался реализовать решение решения Спендера ниже, но мне трудно понять, что мне нужно изменить в моем коде. Может кто-нибудь уточнить? Спасибо