使用LINQ c#获取重复值计数

时间:2016-07-21 09:22:18

标签: c# linq

我想从一个表中获取重复值。输入值如下所示,

  1. SUB -xxx-20160721
  2. SUB -xxx-20160721
  3. SUB -125-20160022
  4. 这里(1)和(2)是相同的值。如果Name大于1,则应返回1。结果应该将计数返回为(2)。

     var numberOfDuplicates = this.UnitOfWork.Repository<Models.SUB>()
                .Queryable().GroupBy(x => x.Name)
                .Where(x => x.Count() > 1)
                .Select(x => x.Count());
    

    结果是

    2 2 2 2 2 3 2 2 4

    请指导我......

2 个答案:

答案 0 :(得分:3)

以下代码的返回值是一个具有2个属性的匿名对象:

  • Value重复的值
  • Amount重复的次数
var numberOfDuplicates = this.UnitOfWork.Repository()
    .Queryable().GroupBy(x => x.Name)
    .Where(x => x.Count() > 1)
    .Select(x => new { Value = x.Key, Amount = x.Count() } );

答案 1 :(得分:1)

您的代码存在的问题是,您使用Count语句返回每个组的Select(x=> x.Count())

您可以使用匿名类型返回名称(分组的Key)和计数:

 var numberOfDuplicates = this.UnitOfWork.Repository<Models.SUB>()
            .Queryable().GroupBy(x => x.Name)
            .Where(x => x.Count() > 1)
            .Select(x => new { Name = x.Key, Count = x.Count() });

foreach(var dup in numberOfDuplicates)
{
     Console.WriteLine($"Name = {dup.Name } ** Counter = {dup.Count}");
}

结果:

Name = 1.SUB -xxx-20160721 ** Count = 2