Проблема в преобразовании ToDictionary <Datetime, double> () с помощью LINQ (C # 3.0) - PullRequest
0 голосов
/ 20 мая 2010

Я написал ниже

return  (from p in returnObject.Portfolios.ToList()
         from childData in p.ChildData.ToList()
         from retuns in p.Returns.ToList()
         select new Dictionary<DateTime, double> ()
         { p.EndDate, retuns.Value }
).ToDictionary<DateTime,double>();

Получение ошибки

Нет перегрузки для метода 'Добавить', принимает аргументы '1'

Где я совершаю ошибку

Я использую C # 3.0

Спасибо

Ответы [ 3 ]

2 голосов
/ 20 мая 2010

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

var dictionary = (from p in returnObject.Portfolios.ToList()
                  from childData in p.ChildData.ToList()
                  from returns in p.Returns.ToList()
                  select new { p.EndDate, returns.Value })
                 .ToDictionary(x => x.EndDate, x => x.Value);

Кстати, вы уверены, что вам нужны все эти вызовы ToList? Это выглядит несколько необычно.

1 голос
/ 20 мая 2010

Попробуйте с:

return  (from p in returnObject.Portfolios
                             from childData in p.ChildData
                             from retuns in p.Returns
                             select new 
                             {p.EndDate, retuns.Value }).ToDictionary(d => d.EndDate , d=>                      
                             d.Value);

Если вы используете словарь, вы должны указать ключ и значение. Это не как список.

Если это в списке:

return  (from p in returnObject.Portfolios
                             from childData in p.ChildData
                             from retuns in p.Returns
                             select new 
                             {p.EndDate, retuns.Value }).ToList();
0 голосов
/ 20 мая 2010

Вместо select new Dictionary<DateTime, double> должно быть select new KeyValuePair<DateTime, double>(...) и ToDictionary() должно быть предоставлено два делегата для выбора ключа и значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...