Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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中的Or()表达式_C#_Linq_Expression - Fatal编程技术网

C# linq中的Or()表达式

C# linq中的Or()表达式,c#,linq,expression,C#,Linq,Expression,这是我的方法: public static IEnumerable<Answer> FilterByKeyValue(this IEnumerable<Answer> query, KeyFilterModel[] filters) { if (filters != null && filters.Length > 0) { foreach (var filter in filters) { fo

这是我的方法:

public static IEnumerable<Answer> FilterByKeyValue(this IEnumerable<Answer> query, KeyFilterModel[] filters)
{
   if (filters != null && filters.Length > 0)
   {
      foreach (var filter in filters)
      {
         foreach (var value in filter.FilterValues)
           query = query.Where(f => f.RespondentEntryID.HasValue && f.RespondentEntry.Values.Any(g => g.Key.Name.Contains(filter.Key) && g.Values.Contains(value)));
      }

    }
    return query;
}
公共静态IEnumerable FilterByValue(此IEnumerable查询,KeyFilterModel[]过滤器)
{
if(filters!=null&&filters.Length>0)
{
foreach(过滤器中的var过滤器)
{
foreach(filter.FilterValues中的var值)
query=query.Where(f=>f.respondentryid.HasValue&&f.respondentry.Values.Any(g=>g.Key.Name.Contains(filter.Key)&&g.Values.Contains(value));
}
}
返回查询;
}
对于迭代中的每个项目,我都有一个查询。其中(…),这是一个和。。。但我想把它放在一个OR函数中


有人能帮我吗?

重申问题:您当前返回的答案符合所有筛选器,并且您希望返回符合任何筛选器的答案

下面是实现此目的的代码:

public static IEnumerable<Answer> FilterByKeyValue(this IEnumerable<Answer> query, KeyFilterModel[] filters)
{
    if (filters != null && filters.Length > 0)
    {
        query = query.Where(a => PassesAnyFilter(a, filters));
    }
    return query;
}

private static bool PassesAnyFilter(Answer answer, KeyFilterModel[] filters)
{
    foreach (var filter in filters)
        foreach (var value in filter.FilterValues)
        {
            if (answer.RespondentEntryID.HasValue && answer.RespondentEntry.Values.Any(g => g.Key.Name.Contains(filter.Key) && g.Values.Contains(value)))
            return true;
        }

    return false;
}
公共静态IEnumerable FilterByValue(此IEnumerable查询,KeyFilterModel[]过滤器)
{
if(filters!=null&&filters.Length>0)
{
query=query.Where(a=>PassesAnyFilter(a,filters));
}
返回查询;
}
私有静态bool PassesAnyFilter(应答应答、键过滤器model[]过滤器)
{
foreach(过滤器中的var过滤器)
foreach(filter.FilterValues中的var值)
{
if(answer.respondenterryid.HasValue&&answer.respondenterry.Values.Any(g=>g.Key.Name.Contains(filter.Key)&&g.Values.Contains(value)))
返回true;
}
返回false;
}

您在or函数中的意思是什么?你怎么说你的函数是and函数呢?我不认为我真的理解你的查询,但是如果你需要编程或者用| |来代替&,如果你需要的话,你也可能想要分组或者(| |)在一起,然后应用&&到组中,或者可能是相反的-versa@KenpachiZaraki:组合Where的行为类似于“and”,即
Where(cond1).Where(cond2)
相当于
Where(cond1&&cond2)
。OP最有可能寻找
Where(cond1 | | cond2)
。检查:同意Magnus的观点,尤其是关于其链接的公认答案:使用PredicateBuilder,它很简单,工作也很好。使用外部库只是有一点小缺点(不是LINQ本机功能)