Определение дубликатов в таблице данных
У меня есть таблица данных, которую я загрузил из файла CSV. Мне нужно определить, какие строки являются дубликатами на основе двух столбцов product_id
а такжеowner_org_id
) в данных. После того как я определил это, я могу использовать эту информацию для построения своего результата, который представляет собой таблицу данных, содержащую только строки, которые не являются уникальными, и таблицу данных, содержащую только строки, которые являются уникальными.
Я рассмотрел другие примеры, приведенные здесь, и код, который я создал до сих пор, компилируется и выполняется, но кажется, что каждая строка данных уникальна. На самом деле в тестовых данных 13 строк, и только 6 уникальны. Ясно, что я делаю что-то не так.
РЕДАКТИРОВАТ: Я подумал, что строки с дубликатами должныВС удаляются, а не только дубликаты этой строки. например, если есть 4 дубликата, все 4 должны быть удалены, а не 3, оставляя одну уникальную строку из 4.
EDIT2: В качестве альтернативы, если я могу выбрать все дублирующиеся строки (вместо того, чтобы пытаться выбрать уникальные строки), это нормально для меня. В любом случае, я могу получить конечный результат.
Код в методе обработки:
MyRowComparer myrc = new MyRowComparer();
var uniquerows = dtCSV.AsEnumerable().Distinct(myrc);
наряду со следующим:
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;
}
}