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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:59:32