0
2つのデータテーブルから共通の行を取得しようとしています。しかし、これらの2つの上の交差演算は、重複行(同じデータ表内の重複)を排除し、一意の行のみを戻します。列挙可能な交差の結果として重複する行を保持する
結果に重複行を保持するにはどうすればよいですか?ここに私のコードは次のとおりです。
最初の列の値が2つの以上の行で同一であるときに、重複するレコードを取得すると仮定するとclass Program
{
public static void Main(string[] args)
{
var a=ImportExcelToDataTable(@"D:\Dummy\Test\CD24.xlsx");
var b = ImportExcelToDataTable(@"D:\Dummy\Test\CD25.xlsx");
CustomDataRowComparer myDRComparer = new CustomDataRowComparer();
try
{
var comonData = a.AsEnumerable().Intersect(b.AsEnumerable(), myDRComparer).CopyToDataTable();
}
catch (Exception ex)
{
ex.ToString();
}
}
}
public class CustomDataRowComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y)
{
for (int i = 0; i < 6; i++)
{
if (i == 4)
{
//ignore
}
else
{
if (x[i].ToString() != y[i].ToString())
{
return false;
}
}
}
return true;
}
public int GetHashCode(DataRow obj)
{
return string.Join("^", obj.ItemArray.Select((x, i) => (i == 4) || (i > 6) ? "" : x.ToString()).ToArray()).GetHashCode();
}
}
これは、単一のデータテーブルから重複した行を返しますが、重複する行を表示する2つのデータテーブル間の共通の行を取得したいとします。例えば。最初のデータテーブルに2つの同一の行AとBがある場合、交差で両方の行が表示されます。 –
次のようにしてみましょう:テーブルのIDを比較する必要があるとしましょう:table1.Field( "ID")はConvert.ToInt32(table2.Field ( "ID")と等価) –
Lakhtey