如何将其更改为:Dictionary<string, Dictionary<DateTime, double>>
var data = segGroups.Join(pPeriods, s => s.segid, p => p.entid, (s, p) => new
{
Name = s.SegCode, // string
Time = p.StartLocal, // datetime
TR = p.Volume // double
})
.GroupBy(s => s.Name)
.ToList();
字符串将是Name
,内部字典将是DateTime
和TR
对。
答案 0 :(得分:5)
var dictionary = data.ToDictionary(group => group.Key,
group => group.ToDictionary(item => item.Time, item => item.TR));
请注意,此处没有强制转换。铸造是把东西当作别的东西,不改变它的真实含义。这是通过创建一个完全基于其他值的全新对象来将列表转换为字典。这是一个重要的区别。
答案 1 :(得分:0)
除非您真正在其他地方使用该列表,否则您无需在ToList()
之前致电ToDictionary
:
var data = segGroups.Join(pPeriods, s => s.segid, p => p.entid, (s, p) => new
{
Name = s.SegCode, // string
Time = p.StartLocal, // datetime
TR = p.Volume // double
})
.GroupBy(s => s.Name)
.ToDictionary(g => g.Key, g => g.ToDictionary(i => i.Time, i => i.TR));
data
将输入Dictionary<string, Dictionary<DateTime, double>>
。
您还必须确保每个组中的Time
是唯一的。否则会引发ArgumentException
,因为Dictionary
中的两个项目不能具有相同的Key
。