/ / C # Помилки під час простого порівняння даних - c #, datatable, datarow

C # помилки при виконанні простого порівняльного порівняння datarow - c #, datatable, datarow

Я в основному намагаюся зробити власний порівняльник рядків даних, щось маленьке і зробити це простим.

В основному я намагаюся порівняти колонку Mykey1 в datatableA та Mykey2 у таблиці данихB.

Я отримую три помилки, і я не знаю, чомуїх кидають або як їх виправити. Так, я знаю, що я використовую цикл for int і змінюю його на рядок, але, очевидно, це лише лабораторія, і так, я буду порівнювати рядки.

Тут в помилках.

  1. Неможливо неявно перетворити тип "int" у "рядок"
  2. ConsoleApplication2.MyDataRowComparer "не реалізує члена інтерфейсу" System.Collections.Generic.IEqualityComparer.GetHashCode (System.Data.DataRow)
  3. ConsoleApplication2.MyDataRowComparer "не реалізує члена інтерфейсу" System.Collections.Generic.IEqualityComparer.Equals (System.Data.DataRow, System.Data.DataRow)

Ось код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
DataTable DT1 = dt1();
DataTable DT2 = dt2();
IEnumerable<DataRow> idrP = DT1.AsEnumerable();
IEnumerable<DataRow> idrS = DT2.AsEnumerable();

MyDataRowComparer MyComparer = new MyDataRowComparer();
IEnumerable<DataRow> Results = idrS.Except(idrP, MyComparer);
}



private static DataTable dt1()
{
DataTable DT1 = new DataTable();
DT1.Columns.Add("Mykey1");
for (int i = 0; i < 10000; i++)
{
DataRow newRow = DT1.NewRow();
newRow[0] = i.ToString();
DT1.Rows.Add(newRow);
}

return DT1;

}


private static DataTable dt2()
{
DataTable DT2 = new DataTable();
DT2.Columns.Add("Mykey2");
for (int i = 0; i < 20000; i++)
{
DataRow newRow = DT2.NewRow();
newRow[0] = i.ToString();
DT2.Rows.Add(newRow);
}

return DT2;

}
}

public class MyDataRowComparer : IEqualityComparer<DataRow>`
{
public string Compare(DataRow x, DataRow y)
{
return String.Compare(x.Field<string>("Mykey1"), y.Field<string>("Mykey2"));
}
}
}

РЕДАГУВАТИ

Ось мій новий DataRowComparer, однак замість цього я не повертаю жодних результатів

{"Index was outside the bounds of the array."}

відкритий клас DataRowComparer: IEqualityComparer { public bool Дорівнює (DataRow x, DataRow y) { повернення x.ItemArray.Except (новий об'єкт [] {x ["Mykey1"]}) == y.ItemArray.Except (новий об'єкт [] {y ["Mykey2"]}); }  public int GetHashCode (об'єкт DataRow) { значення var = obj.ItemArray.Except (новий об’єкт [] {obj [obj.Table.PrimaryKey [0] .ColumnName]}); хеш int = 0; foreach (значення змінної у значеннях) { хеш = (хеш * 397) ^ значення.GetHashCode (); } хеш повернення; } }

Відповіді:

2 для відповіді № 1

String.Compare повертає ціле число, а не рядок, тому вам потрібно змінити підпис методу порівняння. Це має вирішити першу помилку.

Решта помилок пов’язана з тим, що у ваших класах не вистачає необхідних реалізацій, оскільки помилка припускає, що ви пропускаєте System.Collections.Generic.IEqualityComparer.GetHashCode(System.Data.DataRow) метод і System.Collections.Generic.IEqualityComparer.Equals(System.Data.DataRow, System.Data.DataRow) метод