You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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条件:

  1. 先安装LINQKit的NuGet包:Install-Package LinqKit.Microsoft.EntityFrameworkCore
  2. 编写代码:
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__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:40:26