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本机功能)