2014-09-28 31 views
6

Tôi có một dữ liệu và một hàng. Tôi muốn nhập hàng vào datatable chỉ nếu nó không tồn tại trong datatable.Kiểm tra xem hàng có tồn tại trong DataTable không?

Tôi có thể làm điều đó bằng cách nào?

+2

Bạn có một phím ở hàng (như bạn Nên)? – TaW

+0

Không i dont có một, isnt có một phương pháp như "chứa" hoặc "tồn tại"? – Curious

+1

@TamerMemili Nó có [Chứa] (http://msdn.microsoft.com/en-us/library/0hc992ac (v = vs.110) .aspx), nhưng điều đó sẽ chỉ hoạt động với các bảng có PK. –

Trả lời

10

Nếu bạn sử dụng một tập dữ liệu đánh máy, Tức là được khai báo trong thời gian thiết kế, phương thức "linq Contains" lấy một DataRow đã gõ. IEqualityComparer mặc định sẽ so sánh tất cả các giá trị trong DataRow. (Mà thường là vô dụng, vì bạn nên có một khóa được xác định).

DataSet1 ds = new DataSet1(); 
DataSet1.DataTable1Row row = ds.DataTable1.AddDataTable1Row(bla, bla); 
bool exists = ds.DataTable1.Contains(row); 
+0

Là [phần mở rộng] (http://stackoverflow.com/a/34438198/2404470) hữu ích? – xameeramir

+0

Vâng, "LINQ chứa phương pháp" được đề cập ở trên đã là một phần mở rộng phương pháp. NẾU phần mở rộng của bạn đã làm một cái gì đó hữu ích nó MIGHT đã thêm một số giá trị cho MS mở rộng thực hiện. – S22

+0

Tôi muốn thêm .. bạn phải xác định khóa chính trên bảng ngay cả khi bạn không sử dụng tập dữ liệu đã nhập. –

6

Bạn có thể sử dụng LINQ để kiểm tra xem hàng có tồn tại trong datatable hay không. Làm theo giải pháp này và thay thế "id" bằng khóa chính của hàng của bạn, theo đó bạn có thể xác định duy nhất một hàng trong bảng.

DataRow dr = null; // assign your DR here 
DataTable dt = new DataTable(); // assign Datatable instance here. 
var k = (from r in dt.Rows.OfType<DataRow>() where r["id"].ToString() == dr["id"].ToString() select r).FirstOrDefault(); 
if(k != null) 
{ // Row is present } 
7

nếu bạn muốn kiểm tra tất cả các cells trong một DataRow, bạn có thể thử chức năng này:

bool ContainDataRowInDataTable(DataTable T,DataRow R) 
{ 
    foreach (DataRow item in T.Rows) 
    { 
     if (Enumerable.SequenceEqual(item.ItemArray, R.ItemArray)) 
      return true; 
    } 
    return false; 
} 
0
if (Datatable1.Rows[NumOfRow].ToString().Deleted == "Deleted") 
+3

Không giải quyết được câu hỏi – Grantly

3

bạn có thể sử dụng Contains như sau

if(DataTable.Columns.Contains("RowName")) 
{ 
    //Do some stuffs here 
} 
0

Bạn nên kiểm tra sự tồn tại hàng bằng cách so sánh khóa chính:

static bool RowExists(DataTable table, DataRow row) 
{ 
    var pk = table.PrimaryKey 
       .Select(column => row[column, DataRowVersion.Original]) 
       .ToArray(); 

    return table.Rows.Contains(pk); 
} 
Các vấn đề liên quan