c# - 检测重复记录,只选择第一个并用 LINQ/C# 计数

标签 c# linq duplicates

我正在寻求有关使用 C#/LINQ 设计查询以满足以下要求的一些帮助:

我有一个公司列表:-

Id  Name                Email       Address

1   Company A         a@a.com       abc

2   Company B         b@b.com       abc

3   Company C         c@c.com       abc

4   Company D         d@d.com       abc

5   Company A         a@a.com       abc

我的目标是根据两个字段检测重复项,在本例中为“姓名”和“电子邮件”。

期望的输出是如下所示的客户列表:

  1. 重复的客户只能显示一次
  2. 应显示相似记录的数量。

所需的重复列表:-

Id  Qty Name        Email       Address

1   2   Company A       a@a.com     abc (Id/details of first)

2   1   Company B       b@b.com     abc

3   1   Company C       c@c.com     abc

4   1   Company D       d@d.com     abc

最佳答案

如果您明确想在每组重复项中使用最低 ID 的记录,您可以使用

var duplicates = companies
    .GroupBy(c => new { c.Name, c.Email })
    .Select(g => new { Qty = g.Count(), First = g.OrderBy(c => c.Id).First() } )
    .Select(p => new
        {
            Id = p.First.Id,
            Qty = p.Qty,
            Name = p.First.Name,
            Email = p.First.Email,
            Address = p.First.Address
        });

如果您不关心使用哪个记录的值,或者如果您的源已经按 ID(升序)排序,您可以放弃 OrderBy 调用。

关于c# - 检测重复记录,只选择第一个并用 LINQ/C# 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230835/

相关文章:

c# - 如何在 C# 中修改 Access DB 的架构

c# - 使用递归函数遍历 XML

c# - 在数据库中保存用户设置

c# - LINQ to Objects Performance - 用于长时间运行进程的巨大数据集

php - key 2 的重复条目 ''

html - anchor 标签重复

C# async/await 进度报告不符合预期顺序

c# - LINQ vs foreach vs for性能测试结果

c# - 使用 LINQ 获取三角形返回空三角形

python - 选择并使用 Pandas 数据框中的重复行