LINQ词典词典

joh*_*y 5 0 c# linq dictionary

我要创建一个在父ID中匹配的LINQ中的字典字典.

我有一个数据模型

 Pseudo-Model:
    Int ID;
    Int Namel
    Int? ParentID;
Run Code Online (Sandbox Code Playgroud)

我想创建一个Dictonaries字典.第一个Dictionary是那些只是父级的字典,而带有-in的字典将包含ID,Name.

我知道我可以通过循环来做到这一点,但我想知道如何通过LINQ来做到这一点.

D S*_*ley 11

GroupBy创建IGrouping一个Key值,您可以迭代(或进行其他LINQ调用).

ToDictionary需要两个选择器 - 一个用于键,一个用于值.外部字典的关键是ParentID,值是另一个字典,其关键是ID和值Name.

假设它ID是唯一的(至少在一个ParentID组中),你可以这样做:

 _model.Terrtories
       .GroupBy(i => i.ParentID.HasValue ? i.ParentID.Value : 0)   
       .ToDictionary(g => g.Key,   // outer dictionary key
                     g => g.ToDictionary(i => i.ID,   // inner dictionary key
                                         i => i.Name));  // inner dictionary value
Run Code Online (Sandbox Code Playgroud)

请注意,外部的第二个参数ToDictionary是将每个组中的项目转换为内部字典.