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

如何简化C#多参数搜索功能的if else分支判断代码?

简化多参数搜索查询的实现方式

你当前的代码存在两个明显问题:一是大量重复的else if分支,参数越多维护成本越高;二是多余的for循环(Where本身已经完成了集合遍历,外层的for循环完全没必要)。

核心解决方案:动态拼接LINQ查询

利用LINQ的延迟执行特性,我们可以逐个判断参数是否有效,动态添加过滤条件,不管参数增加到多少,代码量都是线性增长,无需考虑所有参数组合。

简化后的代码

public JsonResult getAll(string devname, string status1, string pnumber)
{
    var p = GetAllReports();
    // 初始化查询,利用延迟执行逐步添加条件
    var query = p.AsQueryable();

    // 逐个判断参数,添加对应过滤条件
    if (devname != "nulls")
    {
        query = query.Where(x => x.DeviceName == devname);
    }
    if (status1 != "nulls")
    {
        query = query.Where(x => x.Status == status1);
    }
    if (pnumber != "nulls")
    {
        query = query.Where(x => x.PNB == pnumber);
    }

    // 执行查询并返回结果
    var reportList = query.ToList();
    return Json(reportList, JsonRequestBehavior.AllowGet);
}

为什么这样更优

  • 扩展性极强:如果后续新增参数(比如新增brand、model),只需要添加对应的if判断和Where条件即可,不用考虑参数组合,代码不会爆炸。
  • 代码简洁易读:逻辑清晰,每个参数的过滤逻辑独立,便于维护和修改。
  • 性能更优:原代码中的for循环完全冗余,简化后的代码直接利用LINQ的高效遍历,避免无效操作。

额外优化建议

建议不要用字符串"nulls"来表示无参数,直接使用null或空字符串更符合C#的规范,修改后代码可以更简洁:

// 假设前端不传参数时devname为null或空
if (!string.IsNullOrEmpty(devname))
{
    query = query.Where(x => x.DeviceName == devname);
}

内容的提问来源于stack exchange,提问作者Ali Haydar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:12:24