MVC中多复选框过滤表格:冗余代码求更优实现方案
优化方案
当然有更简洁的实现方式,不用根据复选框数量写一堆分支代码,下面是两种实用方案:
方案一:使用LINQ的Any方法
直接通过Any判断当前公司类型是否包含任意一个选中的复选框值,代码逻辑统一,适配任意数量的选中项:
var deneme = from check in _context.Companies where checkedBoxes.Any(box => check.company_type.Contains(box)) select new Joincco { Companies = check };
这种写法EF Core会自动将其转换为对应的SQL OR条件,和你原来手动写的多分支逻辑效果完全一致,而且不用维护多个if-else块。
方案二:动态构建查询条件(PredicateBuilder)
如果需要更灵活的条件组合(比如后续要加AND逻辑),可以用LINQKit的PredicateBuilder来动态拼接OR条件:
- 先安装LINQKit的NuGet包:
Install-Package LinqKit.Microsoft.EntityFrameworkCore - 编写代码:
using LinqKit; // 初始化一个False的谓词,用于后续拼接OR条件 var predicate = PredicateBuilder.False<Company>(); foreach (var box in checkedBoxes) { var currentBox = box; // 避免闭包导致的变量捕获问题 predicate = predicate.Or(c => c.company_type.Contains(currentBox)); } // 执行查询 var deneme = _context.Companies.AsExpandable() // 必须调用AsExpandable让EF识别拼接的表达式 .Where(predicate) .Select(c => new Joincco { Companies = c });
这种方式适合复杂的动态查询场景,扩展性更强。
内容的提问来源于stack exchange,提问作者E__
相关产品推荐
相关产品推荐

