C# 如何将字典转换为值和键混合的列表?
我有一些字典。让它成为:C# 如何将字典转换为值和键混合的列表?,c#,linq,dictionary,C#,Linq,Dictionary,我有一些字典。让它成为: var dictionary = new Dictionary< string, List<MyClass>>(); var dictionary=newdictionary(); 我需要将其转换为包含键和值属性的对象列表。 我用foreach循环以下一种方式实现了这一点: var list = new List<dynamic>(); foreach (var key in dictionary.Keys) { var
var dictionary = new Dictionary< string, List<MyClass>>();
var dictionary=newdictionary();
我需要将其转换为包含键和值属性的对象列表。
我用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
}
);
}
}
var list=newlist();
foreach(dictionary.Keys中的var键)
{
var值=字典[键];
foreach(值中的var obj)
{
列表。添加(新)
{
对象属性0,
对象属性1,
对象属性2,
...
钥匙
}
);
}
}
它起作用了,但对我来说很粗鲁。使用LINQ是否可以更优雅地执行此操作?您可以使用
选择many
执行此操作
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
,则需要在ToList()之前执行Cast()
。另外,如果您希望匿名类的最后一个属性是key
而不是key
,则需要执行key=kvp.key
可以显示MyClass
的代码吗。我假设它实现了IEnumerable
,因为您对值执行了foreach
。事实上-一个简短但完整的示例会让这更容易帮助您。@juharr谢谢,我错过了MyClass的列表。如果您真的想要列表,请在最后打一个.ToList()
。@MatthewWatson非常正确,修正了,很好的解决方案。这就是我正在寻找的。谢谢