我有一个数据集,我想对其进行分组以确定重复的数据。
示例我有一个看起来像这样的数据集。
|id | Number | ContactID
1 1234 5
2 9873 6
3 1234 7
4 9873 6
现在,我想选择具有多个Number出现但仅在ContactID不相同的情况下的数据。
所以基本上回来了
| Number | Count |
1234 2
谢谢使用LINQ to EF的任何帮助。
最佳答案
此查询避免创建自定义IEqualityComparer
,好像我记得正确地认为它们在EF中不能很好地发挥作用一样。
var results = data.GroupBy(number => number.Number)
.Where(number => number.Count() > 1)
.Select(number => new
{
Number = number.Key,
Count = number.GroupBy(contactId => contactId.ContactId).Count(x => x.Count() == 1)
})
.Where(x => x.Count > 0).ToList();
Fiddle
它执行初始
GroupBy
来获取所有重复的Numbers
。然后,它选择一个新的类型,其中包含数字和第二个GroupBy
(按ContactId
分组),然后使用一个条目对所有组进行计数。然后,它取所有计数大于零的结果。尚未针对EF对其进行测试,但是查询仅使用标准的Linq运算符,因此EF在转换它时不会有任何问题。