2013-12-06 3 views
1

У меня есть фрагмент, как показано ниже. В принципе, я хотел бы создать словарь из серии, которую я сейчас имею. Если бы я сделал это долгий путь, проблем не было, код работал нормально, и я получил ожидаемые результаты.Альтернативная реализация для создания словаря с использованием Linq

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<int> series = new List<int>() { 1,2,3,4 }; 
     Dictionary<int, List<int>> D = new Dictionary<int,List<int>>(); 
     foreach (var item in series) 
     { 
      D.Add(item, seriesWithinSeries(item)); 
     } 

    } 
    public static List<int> seriesWithinSeries(int seed) 
    { 
     return Enumerable.Range(0, seed).Where(x => x < seed).ToList(); 
    } 
} 

Как его преобразовать в Linq? Я пробовал:

D = series.Select(x=> { return new (x,seriesWithinSeries(x));}).ToDictionary<int,List<int>>(); 

Но жалобы компилятора Мне нужен тип для нового, что имеет смысл. Однако я не знаю, как это исправить. Пожалуйста помоги.

+0

вар d = series.ToDictionary (пункт => пункт, пункт => SeriesWithinSeries (пункт)); – abhi

ответ

2

ToDictionary не имеет без параметров. Вам, вероятно, понадобится следующее:

var result = series.ToDictionary(x => x, x => seriesWithingSeries(x)); 

Таким образом, анонимный тип не требуется. Но ради полного объяснения здесь является правильный синтаксис с anonymous type:

var result = series 
    .Select(x => new { Key = x, Value = seriesWithinSeries(x) }) 
    .ToDictionary(pair => pair.Key, pair => pair.Value); 
+0

Sweet! Это оно!!! Огромное спасибо! Линк - это весело, но сложно! – user1205746

+1

@ user1205746 Для записи ваша ошибка на самом деле не была связана с LINQ; это была проблема с синтаксисом создания анонимного типа, который полностью отделен от LINQ, даже если они часто используются вместе. – Servy

+1

@ user1205746 Если вы действительно хотите, чтобы данные внутри сортировались, вам нужно ['SortedDictionary'] (http://msdn.microsoft.com/pl-pl/library/f7fta44c%28v=vs.110%29.aspx) , Если вы хотите просто получить доступ к нему отсортированным способом, тогда 'result.OrderByDescending (x => x.Key)' будет делать то, что вы говорите. – BartoszKP

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