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

ASP Awesome控件Combobox绑定数据时Distinct去重失效问题咨询

问题原因分析
  • 第一种写法的问题:KeyContent是引用类型,默认Distinct()方法采用引用相等性比较,并不会按你期望的Key/Content属性值判断重复,因此去重失效。
  • 第二种写法的问题:直接对Result实体执行Distinct(),是对整个Result行的所有字段做去重,而非仅针对Engineer字段去重,只要行内其他字段有差异,就会被判定为不同对象,自然达不到去重效果。
可行解决方案

优先推荐能在数据库层面完成去重的方案,性能更优:

方案1:先对Engineer字段单独去重(最推荐)

先提取Engineer字段做去重(字符串的Distinct默认按值比较,能直接生效),再映射为KeyContent对象:

public ActionResult GetEngineerData()
{
    var items = db.Results
                .Where(x => x.Engineer != null)
                .Select(o => o.Engineer) // 先单独提取要去重的字段
                .Distinct() // 对字符串值去重,可直接转SQL在数据库执行
                .Select(e => new KeyContent(e, e))
                .ToList();
    // 注意如果是GET请求调用该接口,需要加上JsonRequestBehavior.AllowGet
    return Json(items, JsonRequestBehavior.AllowGet);
}

方案2:按Engineer分组实现去重

如果你需要保留更多字段逻辑,也可以用分组的方式实现按指定字段去重:

public ActionResult GetEngineerData()
{
    var items = db.Results
                .Where(x => x.Engineer != null)
                .GroupBy(o => o.Engineer) // 按Engineer分组,每个分组对应唯一的Engineer值
                .Select(g => new KeyContent(g.Key, g.Key))
                .ToList();
    return Json(items, JsonRequestBehavior.AllowGet);
}

方案3:自定义KeyContent相等比较器(仅适合数据量小的场景)

如果你需要多处对KeyContent做去重,可以自定义相等比较器,注意该方案需要先把数据加载到内存中执行,不适合大数据量场景:

  1. 先实现比较器:
public class KeyContentComparer : IEqualityComparer<KeyContent>
{
    public bool Equals(KeyContent x, KeyContent y)
    {
        if (x == null || y == null) return false;
        return x.Key == y.Key && x.Content == y.Content;
    }

    public int GetHashCode(KeyContent obj)
    {
        return HashCode.Combine(obj.Key, obj.Content);
    }
}
  1. 接口代码:
public ActionResult GetEngineerData()
{
    var items = db.Results
                .Where(x => x.Engineer != null)
                .Select(o => new KeyContent(o.Engineer, o.Engineer))
                .AsEnumerable() // 加载到内存执行后续操作
                .Distinct(new KeyContentComparer()) // 传入自定义比较器
                .ToList();
    return Json(items, JsonRequestBehavior.AllowGet);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:39:04