如何将其转换为字典的字典

时间:2013-04-03 16:31:02

标签: c# linq dictionary lambda group-by

如何将其更改为: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,内部字典将是DateTimeTR对。

2 个答案:

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