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