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

本文关键字:LINQ 获取 使用 | 更新日期: 2023-09-27 17:57:56

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

  1. 子-xxx-20160721
  2. 子-xxx-20160721
  3. SUB-125-20160022

这里(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());

结果是

22.2.2.2.3.2.2.4

请指导我做这件事。。

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

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

  • 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() } );

代码的问题是使用Select(x=> x.Count())语句返回每个组的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