Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#LINQ过滤器嵌套集合_C#_Linq - Fatal编程技术网

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