我有以下类层次结构:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我需要SportPlan.RecordFields按dayOfWeek(.NET enum)过滤并Value使用 LINQ获取s列表。我试过这样的事情,但它不起作用:
var filtredExercises = SportPlan.RecordFields.Select(x => x.Values.Where(v => v.DaysOfWeek.Equals(dayOfWeek))).ToList();
Run Code Online (Sandbox Code Playgroud)
而不是Select,您需要使用Where来过滤您的列表。这样的事情应该接近你想要的:
var filteredExercises = SportPlan.RecordFields
.Where(f => f.Values.Any(v => v.DaysOfWeek.Contains(dayOfWeek)))
.ToList();
Run Code Online (Sandbox Code Playgroud)
这将为您提供所有包含您正在寻找Record的Valuewhere 的s 。DaysOfWeekdayOfWeek
相反,如果您需要Value对象,则可以使用以下内容:
var filteredExercises = SportPlan.RecordFields
.SelectMany(f => f.Values)
.Where(v => v.DaysOfWeek.Contains(dayOfWeek))
.ToList();
Run Code Online (Sandbox Code Playgroud)
使用SelectMany,我们首先将Value对象列表的列表展平为 a IEnumerable<Value>,然后使用dayOfWeek.