gpt4 book ai didi

c# - 使用 LINQ/C# 查询检测 "near duplicates"

转载 作者:行者123 更新时间:2023-11-30 16:21:29 25 4
gpt4 key购买 nike

我正在使用以下查询来检测数据库中的重复项。

使用 LINQ 连接效果不是很好,因为公司 X 也可能被列为公司 X,因此我想修改它以检测“接近重复”。

var results = result
.GroupBy(c => new {c.CompanyName})
.Select(g => new CompanyGridViewModel
{
LeadId = g.First().LeadId,
Qty = g.Count(),
CompanyName = g.Key.CompanyName,
}).ToList();

有人可以建议我更好地控制比较的方法吗?也许通过 IEqualityComparer(虽然我不确定在这种情况下它会如何工作)

我的主要目标是:

  1. 列出包含所有重复项(或“接近重复项”)的子集的第一条记录
  2. 在我用于重复项的字段和文本比较方面具有一定的灵 active 。

最佳答案

对于你明确的“忽略空格”的情况,你可以简单地调用

var results = result.GroupBy(c => c.Name.Replace(" ", ""))...

但是,在您需要灵 active 的一般情况下,我会建立一个 IEqualityComparer<Company> 的库在你的分组中使用的类。例如,这应该在您的“忽略空格”情况下执行相同的操作:

public class CompanyNameIgnoringSpaces : IEqualityComparer<Company>
{
public bool Equals(Company x, Company y)
{
return x.Name.Replace(" ", "") == y.Name.Replace(" ", "");
}

public int GetHashCode(Company obj)
{
return obj.Name.Replace(" ", "").GetHashCode();
}
}

你可以用作

var results = result.GroupBy(c => c, new CompanyNameIgnoringSpaces())...

做包含多个字段或其他相似性定义等的类似事情非常简单。

请注意,您对“相似”的定义必须是可传递的,例如如果你正在查看整数,你不能将“相似”定义为“5 以内”,因为那样你就会有“0 类似于 5”和“5 类似于 10”,而不是“0 类似于 10” ”。 (它也必须是自反和对称的,但这样更直接。)

关于c# - 使用 LINQ/C# 查询检测 "near duplicates",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com