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

.NET环境下如何用LINQ按规则过滤List<SearchResult>并去重

解决方案

你原有代码的问题是仅按CompanyId分组,会把同一企业下所有不同联系人的条目都合并到同一个分组,仅返回第一条,导致结果缺失。

实现逻辑

  1. 首先过滤掉所有CompanyId为null的非法条目
  2. 以CompanyId+ContactId的组合作为去重键,两种合法的唯一标识都会被正确识别:
  • 同时存在CompanyId和ContactId的条目按组合值去重
  • 仅存在CompanyId的条目自动按单独企业ID去重

代码实现

.NET 6及以上版本(推荐)

直接使用内置的DistinctBy方法,代码更简洁:

var result = searchResults
    // 过滤CompanyId为null的非法条目
    .Where(sr => sr.CompanyId.HasValue)
    // 按两个字段的组合去重
    .DistinctBy(sr => new { sr.CompanyId, sr.ContactId })
    .ToList();

兼容低版本.NET框架

使用GroupBy实现同等逻辑:

var result = searchResults
    .Where(sr => sr.CompanyId.HasValue)
    .GroupBy(sr => new { sr.CompanyId, sr.ContactId })
    .Select(grp => grp.First())
    .ToList();

运行结果

执行后输出的结果与你期望的一致:

1 1
2 3
2 4
1 
2 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:15:05