我有一个数据集,我想对其进行分组以确定重复的数据。

示例我有一个看起来像这样的数据集。

|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在转换它时不会有任何问题。

10-07 16:10
查看更多