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

如何优化表格多字段搜索功能 减少多余if判断的实现方案

多字段组合搜索简化实现方案

核心思路是独立判断每个筛选条件,逐个追加查询约束,完全不需要穷举所有条件组合,n个筛选条件最多只需要n个if语句,不管多少种筛选组合都不需要写组合判断逻辑。

搜索表单界面截图


核心实现逻辑

  • 初始查询先拿到全量的待筛选数据源(如果是EF等ORM场景,先不要调用ToList,保持IQueryable延迟加载特性,避免提前查询全表)
  • 每个筛选条件单独判断:只要用户选择/输入了该条件的有效值,就追加对应的Where查询约束
  • 所有条件判断完成后再执行查询获取最终结果

优化后代码示例

后端C#逻辑

// 1. 初始化基础查询
var query = fraindList.AsQueryable();

// 2. 逐个追加筛选条件
// 项目ID筛选
if (hesabrsee.Projectid != 0)
{
    query = query.Where(p => p.Projectid == hesabrsee.Projectid);
}

// 多状态筛选优化(解决你原有逻辑错误:同一状态字段不可能同时等于两个值,改用集合包含匹配多选状态)
var selectedStates = new List<int>();
if (red != 0) 
{
    selectedStates.Add(red);
    ViewBag.red = "checked";
}
if (yealoo != 0) 
{
    selectedStates.Add(yealoo);
    ViewBag.yealoo = "checked";
}
if (selectedStates.Any())
{
    query = query.Where(p => selectedStates.Contains(p.ControlState));
}

// 后续其他筛选条件都可以按这个格式扩展,比如日期、项目名称等
// if (输入值 != 无效默认值) { query = query.Where(对应的筛选约束); }

// 3. 执行查询返回结果
return View(query.ToList());

前端表单代码

<div class="col-md-4 col-xs-12">
    <label>项目名称</label>
    <select class="form-control" id="form_frame" name="Projectid">
        <option value="" default="" selected="">请选择</option>
        @foreach (var item in ViewBag.proList)
        {
            <option value="@item.projectID">@item.projectName</option>
        }
    </select>
</div>

额外优化建议

  • 如果使用EF Core等ORM框架,链式追加Where的方式会自动将所有条件合并为单条SQL执行,不会产生多次数据库请求,性能和手写组合条件完全一致
  • 统一每个字段的无效默认值规则:比如数值类用0、字符串类用空字符串、日期类用DateTime.MinValue,可以进一步简化判断逻辑
  • 如果筛选条件超过10个,还可以把每个筛选条件的判断逻辑封装为独立的扩展方法,代码整洁度会更高

内容的提问来源于stack exchange,提问作者stoo frisat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:27:02