2

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

4

2 回答 2

5
var dictionary = data.ToDictionary(group => group.Key, 
    group => group.ToDictionary(item => item.Time, item => item.TR));

请注意,这里没有进行铸造。铸造是将某物视为另一物,而不改变它的真正本质。这是通过创建一个完全基于其他值的全新对象将列表转换为字典这是一个重要的区别。

于 2013-04-03T16:33:33.717 回答
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.

于 2013-04-03T16:51:33.253 回答