まず、ODBCからすべてのデータを取得する必要があります(これは既に機能しています)。
次に、どのようにそれを行うことができるのかまだわからない、最も複雑な部分があります。ODBCには2つのデータテーブルがあります。それらを現在のコードとマージし、特定のパラメータでフィルタリングしています。
データベースの表1:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
データベースの表2:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
マージされたdataTableは次のようになります。
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
ただし、マージされた出力dataTableは次のようになります(さらに操作する可能性があります)。
NRO NRO1 NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 463 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
で重複を検索しNAME
ます。そのうちの1つだけを残し、表1 NRO
から表2までの番号を割り当てNRO1
ます。表1の数字はNRO
、表2の数字はにあるはずNRO1
です。
ODBCに接続した後、1つのテーブルに表1のデータを入力します
DataTable dataTable = new DataTable("COMPANY");
using (OdbcConnection dbConnectionSE = new OdbcConnection(connectionStringSE))
{
dbConnectionSE.Open();
OdbcDataAdapter dadapterSE = new OdbcDataAdapter();
dadapterSE.SelectCommand = new OdbcCommand(queryStringSE, dbConnectionSE);
dadapterSE.Fill(dataTable);
}
次に、別の表2からデータを取得し、次のようにマージします。
using (OdbcConnection dbConnectionFI = new OdbcConnection(connectionStringFI))
{
dbConnectionFI.Open();
OdbcDataAdapter dadapterFI = new OdbcDataAdapter();
dadapterFI.SelectCommand = new OdbcCommand(queryStringFI, dbConnectionFI);
var newTable = new DataTable("COMPANY");
dadapterFI.Fill(newTable);
dataTable.Merge(newTable);
}
その後、フィルタリングを実行しています(には4と1で始まる行のみが必要ですがNRO
、他の開始番号の行もあります)。
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
次に、さらに1つの列を追加しますNRO1
(これは、ゼロも追加します(0)列では必要ありませんNRO1
)。
results.Columns.Add("NRO1", typeof(int)).SetOrdinal(1);
foreach (DataRow row in results.Rows)
{
//need to set value to NewColumn column
row["NRO1"] = 0; // or set it to some other value
}
このコードで重複をキャッチできます
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
しかし、残りを実行する方法は?これは、新しいテーブルを作成するループで実行する必要がありますか?重複を結合および削除するにはどうすればよいdataTable
ですか?
NAME
。3つ以上の場合-エラー(エラーハンドラー)。2.例でエラーが発生しました。今すぐ修正しました。これについて言及していただきありがとうございます、それは重要です。
dataTable
一部の名前に3つ以上の重複を含めることができますか?たとえば、BMWに3つの複製が存在することは可能ですか?2.保持する重複レコードと削除する重複レコードをどのように定義できますか?たとえば、最小限のレコードを保持しNRO
、他のレコードを削除できます。