通过多个列进行分组并查找重复项

时间:2019-01-28 19:53:43

标签: c# linq

在此处使用c#Sytem.Linq

我想在表中找到重复项。当表中已经存在三列的组合时,将定义一个重复项。

例如,下面是重复记录:

Row Id Name Value Status
 1  1  Peter 1    New
 2  1  Peter 1    Old
 3  1  Peter 1    Pending
 4  2  Peter 1    New
 5  2  Sandy 2    Old

在上表中,第1、2和3行是重复的。所以我写了下面的查询来查找所有重复项:

//Below response holds all data from my db
var result = response
                 .GroupBy(o => new { o.Id, o.Name, o.Value })
                 .Where(g => g.Count() > 1)
                 .Select(y => y.Key)
                 .ToList();

我上面的查询显示了数据中的所有结果,而不是重复的。我在这里做错了什么?

我希望查询仅根据上述条件返回重复项。

1 个答案:

答案 0 :(得分:1)

我在https://facebook.github.io/graphql/June2018/#sec-Errors尝试了您的代码,它工作正常。您的问题可能在其他地方。这是我尝试过的方法:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var response = new [] {
            new { Id = 1, Name = "Peter", Value = 1, Status = "New" },
            new { Id = 1, Name = "Peter", Value = 1, Status = "Old" },
            new { Id = 1, Name = "Peter", Value = 1, Status = "Pending" },
            new { Id = 2, Name = "Peter", Value = 1, Status = "New" },
            new { Id = 2, Name = "Sandy", Value = 2, Status = "Old" }
        };
        var result = response
                 .GroupBy(o => new { o.Id, o.Name, o.Value })
                 .Where(g => g.Count() > 1)
                 .Select(y => y.Key)
                 .ToList();

        Console.WriteLine(string.Join(Environment.NewLine, result));
    }
}

输出:

{ Id = 1, Name = Peter, Value = 1 }