c# - 如何通过混合值和键将字典转换为列表?

标签 c# linq dictionary

我有一些字典。让它成为:

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/

相关文章:

c# - 如何使用 Entity Framework 将空值传递给存储过程?

c# - 简化字符串拆分

C# 通用接口(interface)白名单候选过滤

python - 如何为实例更改 dict() 的行为

Python如何从for循环中的字典列表中删除空行?

python - 检查字母是否可以用来构建单词

c# - 将 SQL 转换为 lambda

c# - 如何查看 lambda 表达式的 SQL 查询

c# - Linq to objects - 选择第一个对象

linq - 按匿名与分组分组按非匿名分组