MVC C#搜索过滤器问题:复选框多选后结果重复如何修正?
解决多条件筛选重复记录的问题
嘿,我来帮你搞定这个重复记录的坑!
你现在遇到的问题根源很明确:你的代码是循环遍历每个筛选条件,把符合单个条件的记录挨个塞进结果列表里。比如说,当你选了a和b时,既会把所有含a的记录加进去,又会把所有含b的记录加进去——那那些同时包含a和b的记录就会被加两次,最后结果自然就出现重复了。
优化方案(两种场景可选)
我们直接从数据库查询层面解决问题,不用查完再去重,效率更高:
场景1:符合任意一个筛选条件即可(含a 或 含b)
把原来的循环逻辑改成用Any()合并筛选条件,让数据库一次性返回所有符合条件的唯一记录:
public ActionResult GetProducts(List<string> filter) { // 处理筛选条件为空的情况,避免报错 if (filter == null || !filter.Any()) { return View(new List<Product>()); } // 核心逻辑:只要tMal包含筛选列表中的任意一个值,就保留这条记录 var proc = db.Product.Where(x => filter.Any(f => x.tMal.Contains(f))).ToList(); return View(proc); }
场景2:必须同时满足所有筛选条件(含a 且 含b)
如果你需要的是同时包含所有选中条件的记录,把Any()换成All()就行:
public ActionResult GetProducts(List<string> filter) { if (filter == null || !filter.Any()) { return View(new List<Product>()); } // 核心逻辑:tMal必须包含筛选列表中的每一个值 var proc = db.Product.Where(x => filter.All(f => x.tMal.Contains(f))).ToList(); return View(proc); }
为什么这样能解决问题?
原来的循环会多次查询数据库,每次都把新的结果追加到列表里,自然会产生重复;而修改后的代码只做一次数据库查询,数据库会直接返回符合条件的唯一记录,既避免了重复,又提升了查询效率。
内容的提问来源于stack exchange,提问作者Jr. Developer
相关产品推荐
相关产品推荐

