c#LINQ过滤器嵌套集合
我有下一个类层次结构:c#LINQ过滤器嵌套集合,c#,linq,C#,Linq,我有下一个类层次结构: public class URecordFieldEmr { 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&
public class URecordFieldEmr
{
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; }
}
但在这种情况下,如果我有两个值
s:第一个值-DaysOfWeek
-周日,第二个值-周一,当我尝试按周日过滤时,我会得到这两个值。但我需要包含一周中特定日期的值
p.S.dayOfWeek是.NET enum我假设的是,您也需要筛选匹配的
值
属性,对吗?如果是这样,下面的查询可能会有所帮助
var result = uRecordFields.Select(x => new URecordFieldEmr
{
Values = x.Values.Where(y => y.DaysOfWeek.Any(z => z == DayOfWeek.Sunday)).ToList(),
Alias = x.Alias,
Key = x.Key
}).Where(x => x.Values != null && x.Values.Count != 0).ToList();
问题是,如果匹配只能精确到一周一天,为什么还要在类值中列出dayofweek?难道价值不应该像这样吗
public class Value
{
public int Index { get; set; }
public DayOfWeek d { get; set; }
}
或者,您是否希望也能够检查List DaysOfWeek
是否包含与您要比较的完全相同的组合,例如,周一和周日,那么列表需要精确且仅包含周一和周日?或者星期三、星期五和星期四,那么列表必须只包含这些值,并且所有3个值都必须存在
无论如何,在这种情况下,您只需要比较一个条目,并且它应该是列表中的唯一条目(如您所述),或者如上所述重写values类。
或者你可以这样检查:
var filtredExercises = uRecordFields
.Where(f => f.Values.Any(v => v.DaysOfWeek.Contains(dayOfWeek)))
.ToList();
var filtredExercises = uRecordFields
.Where(f => f.Values.Any( v => v.DaysOfWeek.count = 1 && v.DaysOfWeek.FirstOrDefault() == dayofweek))
.ToList();
也许这种方法更具可读性。如果类允许同一天的多个条目,还可以在firstordefault()之前添加distinct()
您还可以对类值执行一个方法,该方法为您执行检查,然后在lambda中调用该方法。但这取决于检查的自然责任是否在课堂本身。对不起,你的问题到底是什么。您想要所有同时包含星期一和星期日的uRecordFields,还是要包含星期一或星期日?@DaveyvanTilburg我需要包含一周中特定日期的值。(就我而言——星期天)好吧,你在任何地方都做得很好。你是说你只想要只有星期天的uRecordFields?如果我理解正确,你不需要
URecordFieldEmr
对象如果他的值包含sunday
和sunday
,你只想要所有有值的对象只包含sunday