我正在寻求有关使用 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
我的目标是根据两个字段检测重复项,在本例中为“姓名”和“电子邮件”。
期望的输出是如下所示的客户列表:
- 重复的客户只能显示一次
- 应显示相似记录的数量。
所需的重复列表:-
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/