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

C# 如何将其转换为字典的字典,c#,linq,dictionary,lambda,group-by,C#,Linq,Dictionary,Lambda,Group By,如何将其更改为:Dictionary 字符串将是名称,内部字典将是日期时间和TR对 var dictionary = data.ToDictionary(group => group.Key, group => group.ToDictionary(item => item.Time, item => item.TR)); 请注意,这里没有进行铸造。铸造是将某事物视为另一事物,而不改变它的真实面目。这是通过创建一个完全基于其他值的全新对象,将列表转换为字典。这

如何将其更改为:
Dictionary

字符串将是
名称
,内部字典将是
日期时间
TR

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

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

您不必在
ToDictionary
之前调用
ToList()
,除非您确实在其他地方使用该列表:

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));
数据
将被键入
字典


您还必须确保每个组中的时间是唯一的<否则将抛出code>ArgumentException,因为
Dictionary
中的两个项不能具有相同的

谢谢您的回答,i.TR必须是i=>i.TR
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));