Öncelikle ODBC'den tüm verileri almam gerekiyor (bu zaten çalışıyor).
Daha sonra nasıl yapılabileceğinden emin olmadığım en karmaşık kısım geliyor. ODBC'de iki veri tablosu vardır. Onları mevcut kodumla birleştiriyorum ve belirli parametrelerle filtreliyorum.
Veritabanındaki Tablo 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
Veritabanındaki Tablo 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
Birleştirilmiş veriler Tablo şu şekilde görünür:
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
Bununla birlikte, birleştirilmiş çıktı verileri
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
İçindeki kopyaları bulun NAME
. Bunlardan yalnızca birini bırakın, Tablo 1'den NRO
Tablo 2'ye bir sayı atayın NRO1
. Tablo 1 numaraları NRO
, Tablo 2 numaraları olmalıdır NRO1
.
ODBC'ye bağlandıktan sonra bir tabloyu Tablo 1'deki verilerle dolduruyorum
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);
}
sonra başka bir Tablo 2 veri alıyorum ve bunları birleştirerek:
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);
}
Bundan sonra filtreleme yapıyorum (sadece 4 ve 1 inç ile başlayan satırlara ihtiyacım NRO
var, diğer başlangıç numarasına sahip satırlar da var):
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
Sonra bir sütun daha ekliyorum NRO1
(bu da sıfırlar ekliyor (0) Ben Sütun onlara ihtiyacım yok 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
}
Bu kodla kopyaları yakalayabilirim
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
ama geri kalanı nasıl yapılır? Bu yeni bir tablo oluşturmak ile bir döngü tarafından yapılmalıdır? Kopyaları birleştirme ve kaldırma işlemini nasıl yapabilirim dataTable
?
NAME
. İkiden fazla hata varsa (hata işleyici). 2. Örneğimde bir hata oluştu, şimdi düzelttim. Bundan bahsettiğiniz için teşekkürler, önemli.
dataTable
isim için ikiden fazla kopya içerebilir mi? Örneğin, BMW için üç kopya var mı? 2. Çift kayıtların hangilerinin saklanacağını ve hangilerinin silineceğini nasıl tanımlayabiliriz? Örneğin, minimum kayıt tutabilirNRO
ve diğer kaydı silebiliriz.