使用LINQ(C#3.0)</datetime,double>转换ToDictionary <datetime,double>()时出现问题

时间:2010-05-20 06:37:34

标签: linq c#-3.0 dictionary

我写了下面的

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 个答案:

答案 0 :(得分:2)

嗯,你正在调用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 :(得分:1)

尝试:

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();

答案 2 :(得分:0)

而不是select new Dictionary<DateTime, double>应该是select new KeyValuePair<DateTime, double>(...)ToDictionary()应该有两个代表来选择键和值。