当前位置: 首页 > 编程语言 > C#

Linq-to-SQL:组合(或运算)多个“包含”过滤器?

时间:2023-04-10 16:40:22 C#

Linq-to-SQL:组合(或运算)多个“包含”过滤器?我在找出执行此操作的最佳方法时遇到了一些麻烦,我们将不胜感激任何帮助。基本上,我正在设置一个过滤器,允许用户查看与用户名的任意“过滤器”关联的审计项目的历史记录。数据源是SQLServer数据库,所以我会使用IQueryable“源”(来自数据库上下文对象的直接表引用,或者可能是另一个查询产生的IQueryable),应用WHERE过滤器,然后返回结果IQueryable对象...但我对如何使用此方法执行OR感到有点困惑。我已经考虑过表达式的路径,因为我知道如何对它们进行OR,但我仍然无法弄清楚如何使用“包含”类型评估来做到这一点,所以我目前正在使用UNION,但我很担心关于这个可能会对性能产生负面影响,我想知道如果我以任意顺序添加其他过滤器(除了此处显示的用户名过滤之外)是否可能无法完全按照我的要求进行操作。这是我的示例代码:publicoverrideIQueryableApplyFilter(IQueryablesource){//取允许的值...//(这只是填充我的搜索字符串列表)IQueryableoReturn=null;//单步执行每次迭代,并执行一个'LIKE%value%'查询string[]searchArray=searchStrings.ToArray();for(inti=0;ix.Username.Contains(value));else//对于其他步骤,在WHEREoReturn=oReturn.Union(source.Where(x=>x.Username.Contains(value)))上执行UNION;返回oReturn??来源;这感觉像是错误的方法,但它似乎确实有效,所以我的第一个问题是,有没有更好的方法?另外,有没有办法对表达式进行“包含”或“喜欢”?(编辑以更正我的代码:将其发布回工作状态,我显然没有回滚足够远:))================================================ETA:基于给出的解决方案,这是我的新代码(如果有人感兴趣的话):publicoverrideIQueryableApplyFilter(IQueryable来源){ListsearchStrings=newList(AllowedValues);//构建搜索值集合string[]searchArray=searchStrings.ToArray();表达式<函数>expression=PredicateBuilder.False();for(inti=0;ix.Username.Contains(value));}returnsource.Where(表达式);}(我注意到一个警告:在PredicateBuilder的示例之后,搜索Anemptycollectionofstringswillreturnfalse(false||value1||...),而在我的原始版本中,我假设一个空列表应该只适用于未经过滤的,仔细想想,新版本似乎对我的需求更有意义,所以我采用了它)===================================================可以使用LINQkit中的PredicateBuilder来动态构建查询以上是C#学习教程:Linq-to-SQL:组合(或运算)多个“包含”过滤器?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: