Đầu tiên tôi cần lấy tất cả dữ liệu từ ODBC (cái này đã hoạt động rồi).
Sau đó đến phần phức tạp nhất mà tôi không chắc làm thế nào nó có thể được thực hiện. Có hai bảng dữ liệu trong ODBC. Tôi đang hợp nhất chúng với mã hiện tại của tôi và lọc chúng với các tham số nhất định.
Bảng 1 trong cơ sở dữ liệu:
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
Bảng 2 trong cơ sở dữ liệu:
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
Dữ liệu đã hợp nhất trông như thế này:
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
Tuy nhiên, dữ liệu đầu ra được hợp nhất sẽ trông như thế này (để có khả năng làm việc với nó hơn nữa):
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
Tìm bản sao trong NAME
. Chỉ để lại một trong số họ, gán một số từ Bảng 1 đến NRO
từ Bảng 2 đến NRO1
. Số bảng 1 phải ở trong NRO
, số 2 bảng nên ở NRO1
.
Sau khi kết nối với ODBC, tôi điền vào một bảng với dữ liệu từ Bảng 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);
}
sau đó tôi nhận dữ liệu từ Bảng 2 khác và hợp nhất chúng bằng cách:
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);
}
Sau đó tôi đang thực hiện lọc (tôi cần có các hàng chỉ bắt đầu bằng 4 và 1 NRO
, cũng có các hàng có số bắt đầu khác):
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
Sau đó, tôi sẽ thêm một Cột nữa cho NRO1
(đây cũng là thêm số không (0) Tôi không cần chúng trong Cột 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
}
Tôi có thể bắt các bản sao với mã này
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
Nhưng làm thế nào để thực hiện phần còn lại? Điều này nên được thực hiện bởi một vòng lặp với việc xây dựng một bảng mới? Làm thế nào tôi có thể thực hiện tham gia và loại bỏ trùng lặp dataTable
?
NAME
. Nếu có nhiều hơn hai - lỗi (xử lý lỗi). 2. Có một lỗi trong ví dụ của tôi, tôi đã sửa nó ngay bây giờ. Cảm ơn bạn đã đề cập đến điều này, nó rất quan trọng.
dataTable
chứa nhiều hơn hai bản sao cho một số tên? Ví dụ, có thể tồn tại ba bản sao cho BMW không? 2. Làm thế nào chúng ta có thể xác định bản ghi song công nào cần lưu giữ và bản ghi nào cần xóa? Ví dụ: chúng ta có thể giữ bản ghi với mức tối thiểuNRO
và xóa bản ghi khác.