c# - 嵌套集合的 LINQ 过滤器列表
问题描述
我有以下类层次结构:
public class SportPlan
{
public Guid Id { get; set; }
public string Name { get; set; }
public List<Record> RecordFields { get; set; }
}
public class Record
{
public Guid Key { get; set; }
public string Alias { get; set; }
public List<Value> Values { get; set; }
}
public class Value
{
public int Index { get; set; }
public List<DayOfWeek> DaysOfWeek { get; set; }
}
我需要SportPlan.RecordFields
按dayOfWeek
(.NET 枚举)过滤并Value
使用 LINQ 获取 s 列表。我尝试过这样的事情,但它不起作用:
var filtredExercises = SportPlan.RecordFields.Select(x => x.Values.Where(v => v.DaysOfWeek.Equals(dayOfWeek))).ToList();
解决方案
而不是Select
,您需要使用Where
来过滤您的列表。像这样的东西应该接近你想要的:
var filteredExercises = SportPlan.RecordFields
.Where(f => f.Values.Any(v => v.DaysOfWeek.Contains(dayOfWeek)))
.ToList();
这将为您提供所有包含您正在寻找的whereRecord
的 s 。Value
DaysOfWeek
dayOfWeek
如果您需要Value
对象,则可以使用以下内容:
var filteredExercises = SportPlan.RecordFields
.SelectMany(f => f.Values)
.Where(v => v.DaysOfWeek.Contains(dayOfWeek))
.ToList();
使用SelectMany
,我们首先将对象列表的列表展平Value
为 a IEnumerable<Value>
,然后使用dayOfWeek
.
推荐阅读
- javascript - Gutenberg Richtext 组件在一次击键后将用户选项卡移出字段
- amazon-web-services - 大三角帆 + ECR 访问
- php - 使用输入变量确定 forloop 必须执行的内容(以及执行次数)
- python-3.x - 遍历嵌套列表并附加其他列表的函数无法正常运行
- xml - 使用 XSL 转换生成 HTML 实体
- bash - 使用 awk 打印标题名称和子字符串
- twilio - 有关如何通过 Twilio 中的文本更改工作人员状态的任何示例?
- php - PHP Symfony 是否可以通过 html 代码中的 json 返回表单?
- geometry - 不同大小圆的简单圆包装问题
- javascript - ajax调用后删除元素