如何简化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
相关产品推荐
相关产品推荐

