c# - 如何高效提取数据?
问题描述
有下一个数据结构:
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 或扩展方法以这种方式检索数据的有效且紧凑的方法?
解决方案
以我的拙见,大多数答案都非常接近,但它们有一些小的缺陷。我会这样写:
var output = parents
.SelectMany(p => p.Children)
.Where(c => c.Value != 0)
.GroupBy(c => c.Name)
.Select(g => g.First())
.ToList();
推荐阅读
- android - 使用 bitrise 工具的 Cordova-android 问题
- sql - 查询以获取存储在记录中的日期范围内的行数
- docker - 如何在 GitHub 操作中签出 docker 内的 repo
- wordpress - WPBakery Grid Builder 发布内容格式
- excel - 带有命令按钮的 if 语句并更改单元格值
- java - 如何从 JPA 元素集合中的子项获取父项?
- gluon - 我们如何查找 Gluon 小部件的 CSS 类名称?
- python - 创建一个函数以返回一个字典,其中键为给定的除数,值取自一个范围
- sql - 按空格和'-' SQL Server 分割字符串
- javascript - 使用 v3 中的矩形节点更新 d3 垂直树