Tag Archives: CSharp

Find Duplicates with Linq

Vorbei sind die Zeiten von “uneleganten” verschachtelten Schleifen!

public static class IEnumerableExtensions
{
    public static IEnumerable<Tuple<TKey, IEnumerable<TObject>>> Duplicates<TKey, TObject>(this IEnumerable<TObject> enumerable, Func<TObject, TKey> groupBy)
    {
        return enumerable
            .groupBy(GroupBy, (key, objects) => new Tuple<TKey, IEnumerable<TObject>>(key, objects))
            .Where(g => g.Item2.Count() > 1);
    }
}

Und hier noch ein Beispiel, wie die Methode angewendet werden kann.
Gegeben ist eine Collection von “Entity”.

var myDuplicates = entities.Duplicates(e => e.Id);
foreach (var myDuplicate in myDuplicates)
{
    Console.WriteLine(myDuplicate.Item1);
    foreach (var entity in myDuplicate.Item2)
    {
        Console.WriteLine("t{0}", entity["name"]);
    }
}