我有一些字典。让它成为:
var dictionary = new Dictionary< string, List<MyClass>>();
我需要将其转换为包含键和值属性的对象列表。 我通过以下方式使用 foreach 循环完成了它:
var list = new List<dynamic>();
foreach (var key in dictionary.Keys)
{
var values = dictionary[key];
foreach (var obj in values)
{
list.Add(new
{
obj.Property0,
obj.Property1,
obj.Property2,
...
key
}
);
}
}
它有效,但对我来说看起来很粗鲁。是否可以使用 LINQ 更优雅地完成此操作?
最佳答案
您可以使用 SelectMany
来做到这一点.
var list = dictionary.SelectMany(
kvp => kvp.Value,
(kvp,obj) => new {obj.Property0, obj.Property1, obj.Property2, kvp.Key})
.ToList();
或者查询snytax
var list = (from kvp in dictionary
from obj in kvp.Value
select new {obj.Property0, obj.Property1, obj.Property2, kvp.Key})
.ToList();
请注意,这会生成一个匿名类列表。如果你真的想要dynamic
你需要做一个 Cast<dynamic>()
在 ToList()
之前.此外,如果您希望匿名类的最后一个属性为 key
而不是 Key
你需要做 key = kvp.Key
.
关于c# - 如何通过混合值和键将字典转换为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33672325/