2010-02-28 2 views
2

Мне любопытно, есть ли способ, которым я могу захватить нижние строки (создание словаря и цикл для добавления значений) в самом выражении linq. В настоящий момент выбранный новый возвращает новый анонимный тип, но мне интересно, есть ли способ заставить его вернуть словарь со всеми значениями, предварительно заполненными.Можем ли мы сделать это более кратким с linq?

XDocument reader = XDocument.Load("sl.config"); 
    var configValues = from s in reader.Descendants("add") select new { Key = s.Attribute("key").Value, s.Attribute("value").Value }; 

    Dictionary<string, string> Settings = new Dictionary<string, string>(); 

    foreach (var s in configValues) 
    { 
     Settings.Add(s.Key, s.Value); 
    } 

ответ

6

Try Enumerable.ToDictionary способ расширения.

XDocument reader = XDocument.Load("sl.config"); 
var Settings = reader.Descendants("add") 
    .ToDictionary(s => s.Attribute("key").Value, s => s.Attribute("value").Value); 
+0

Он должен быть 'Словарь <строка, строка> Настройки =', а не 'вар configValues ​​=' – Gabe

+0

Да, фиксированная имя переменной, спасибо ;-) –

+0

Спасибо за это! – keithwarren7

2
var = XDocument.Load("sl.config").Descendants("add").ToDictionary 
    (x => x.Attribute("key"). Value, x => x.Attribute("value"). Value); 
+0

Надеюсь, вы не против, что я отформатировал немного. :) –

Смежные вопросы