2010-05-20 58 views
0
轉換ToDictionary <日期時間,雙>()

我已經寫了下面問題在使用LINQ(C#3.0)

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

感謝

回答

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,順便說一句嗎?這似乎有點不尋常。

0

相反的select new Dictionary<DateTime, double>應該select new KeyValuePair<DateTime, double>(...)ToDictionary()應給予兩名代表,選擇鍵和值。

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