我正在使用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; }
}
我尝试了很多方法,但我无法弄清楚如何使用动态密钥名称来获取结构。任何人都可以给我一个线索? 提前谢谢。
答案 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());