2016-07-21 10 views
1

Ich möchte die Anzahl der doppelten Werte aus einer Tabelle erhalten. Die Eingangswerte sind wie als unten,Erhalte doppelte Werte mit LINQ C#

  1. SUB -xxx-20.160.721
  2. SUB -xxx-20.160.721
  3. SUB -125-20160022

hier (1) und (2) gleicher Wert. Wenn der Name größer als 1 ist, sollte 1 als Ergebnis zurückgegeben werden. Das Ergebnis sollte die Anzahl als (2) zurückgeben.

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

Das Ergebnis ist

Bitte leite mich auf diese ..

+2

Was Ausgang erwartet wird? –

Antwort

3

Die Rückkehr Wert des unteren Codes ist ein anonymer o bject mit 2 Eigenschaften:

  • Value Der Wert, der
  • Amount Die Höhe der Zeit Duplikat ist es Duplikat ist
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

Das Problem mit Ihrem Code ist, dass Sie die Count sind Rückkehr jeder Gruppe mit der Select(x=> x.Count()) Anweisung.

Sie können den Namen zurückkehren (Die Key der Gruppierung) und den Grafen mit anonymen Typen:

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}"); 
} 

Ergebnisse:

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