使用组值作为键的动态对象

时间:2016-08-17 20:38:25

标签: c# linq dictionary

我正在使用EntityFramework开发Asp.Net WebAPI,并且需要使用动态值作为键返回一些定义。定义存储在定义表中,如下所示:

 NICK     VALUE   DESCRIPTION
------    -----  --------------
GRADE      1      Very low
GRADE      2      Low
GRADE      3      Fair
GRADE      4      High
GRADE      5      Very high
CONTROL    1      There is no control
CONTROL    2      Control is fairly structured
...        ...    ...

而不是像往常一样获得定义列表:

[ { "nick": "GRADE", "value": 1, "description": "Very low" },
  { "nick": "GRADE", "value": 2, "description": "Low" }, ... 
]

我想获得以下结构:

[ "GRADE": [ 
    { "value": 1, "description": "Very low" }, 
    {"value": 1, "description": "Low" } ...
    ],
  "CONTROL": [ ... ]
]

使用WebAPi函数,如:

public Dictionary<string, List<ValueDescription>> GetDefinitions()

其中ValueDescription是一个简单的类,如下所示:

public class ValueDescription {
    public int Value { get; set; }
    public string Description { get; set; }
}

我尝试了很多方法,但我无法弄清楚如何使用动态密钥名称来获取结构。任何人都可以给我一个线索? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以按NICK对定义进行分组,然后使用ToDictionary方法将组Key作为字典键传递,并将组元素投影到ValueDescription列表作为字典值。< / p>

这样的事情:

var result = db.Definitions
    .GroupBy(e => e.NICK)
    .ToDictionary(g => g.Key, g => g.Select(e => new ValueDescription
    {
        Value = e.VALUE,
        Description = e.DESCRIPTION,
    }).ToList());