首页 > 解决方案 > 如何高效提取数据?

问题描述

有下一个数据结构:

var parents = new List<Parent>
{
    new Parent
    {
        Children = new List<Child>
        {
            new Child { Name = "Name1",  Value = 100 },
            new Child { Name = "Name2",  Value = 0 },
        }
    },
    new Parent
    {
        Children = new List<Child>
        {
            new Child { Name = "Name1",  Value = 0 },
            new Child { Name = "Name2",  Value = 200 },
        }
    },
    new Parent
    {
        Children = new List<Child>
        {
            new Child { Name = "Name1",  Value = 0 },
            new Child { Name = "Name2",  Value = 200 },
        }
    },
    new Parent
    {
        Children = new List<Child>
        {
            new Child { Name = "Name1",  Value = 100 },
            new Child { Name = "Name2",  Value = 0 },
        }
    }
};

父母有相似的孩子,但其值可以是二进制不同的(0 或某个值)。

输出应该是:

var output = new List<Child>
{
    new Child { Name = "Name1",  Value = 100 },
    new Child { Name = "Name2",  Value = 200 },
};

是否有通过 LINQ 或扩展方法以这种方式检索数据的有效且紧凑的方法?

标签: c#linq

解决方案


以我的拙见,大多数答案都非常接近,但它们有一些小的缺陷。我会这样写:

var output = parents
    .SelectMany(p => p.Children)
    .Where(c => c.Value != 0)
    .GroupBy(c => c.Name)
    .Select(g => g.First())
    .ToList();

推荐阅读