Określanie duplikatów w zbiorze danych

Mam załadowaną tabelę danych z pliku CSV. Muszę określić, które wiersze są duplikatami na podstawie dwóch kolumn (product_id iowner_org_id) w datatable. Gdy już to ustalę, mogę użyć tych informacji do zbudowania wyniku, który jest datatable zawierający tylko wiersze, które nie są unikalne, oraz tabelę danych zawierającą tylko unikalne wiersze.

Sprawdziłem tutaj inne przykłady i kod, który do tej pory wymyśliłem, kompiluje się i wykonuje, ale wydaje się, że każdy wiersz danych jest unikalny. W rzeczywistości w danych testowych jest 13 wierszy, a tylko 6 jest unikatowych. Więc wyraźnie robię coś złego.

EDYTOWAĆ: Myślałem, że powinienem zauważyć, że wiersze, które mają duplikaty, powinnyWSZYSTKO zostać usunięte, a nie tylko duplikaty tego wiersza. np. jeśli są 4 duplikaty, wszystkie 4 powinny zostać usunięte nie 3, pozostawiając jeden unikalny wiersz z 4.

EDIT2: Alternatywnie, jeśli mogę wybrać wszystkie zduplikowane wiersze (zamiast próbować wybierać unikalne wiersze), to jest w porządku. Tak czy inaczej, doprowadzi mnie to do wyniku końcowego.

Kod w metodzie przetwarzania:

MyRowComparer myrc = new MyRowComparer();
var uniquerows = dtCSV.AsEnumerable().Distinct(myrc);

wraz z następującymi:

public class MyRowComparer : IEqualityComparer<DataRow>
{
    public bool Equals(DataRow x, DataRow y)
    {
        //return ((string.Compare(x.Field<string>("PRODUCT_ID"),   y.Field<string>("PRODUCT_ID"),   true)) ==
        //        (string.Compare(x.Field<string>("OWNER_ORG_ID"), y.Field<string>("OWNER_ORG_ID"), true)));
        return
            x.ItemArray.Except(new object[] { x[x.Table.Columns["PRODUCT_ID"].ColumnName] }) ==
            y.ItemArray.Except(new object[] { y[y.Table.Columns["PRODUCT_ID"].ColumnName] }) &&
            x.ItemArray.Except(new object[] { x[x.Table.Columns["OWNER_ORG_ID"].ColumnName] }) ==
            y.ItemArray.Except(new object[] { y[y.Table.Columns["OWNER_ORG_ID"].ColumnName] });
    }

    public int GetHashCode(DataRow obj)
    {
        int y = int.Parse(obj.Field<string>("PRODUCT_ID"));
        int z = int.Parse(obj.Field<string>("OWNER_ORG_ID"));
        int c = y ^ z;
        return c;
    }
}