2011-03-29 41 views
0

我有一個table1,我想從table2中刪除數據行。我試圖環通的數據,並相應地刪除...如何基於另一個表刪除一個表中的一行?

while (myDataReader.Read()) 
{   
    DataTable.Rows.Remove(DataRow); 
} 

沒有運氣,我也嘗試過兩個表已填充

var correctDataTable = from p in DataTable 
         where (!tempDataTable.Rows.Contains(p)) 
         select new { p }; 

任何想法後刪除?在你的數據庫上

DataTable.Rows.Remove(DataRow); 

+0

你使用任何數據訪問方法嗎?像實體框架,Linq to sql或NHibarate。你也沒有用你的代碼去除數據。您正嘗試刪除整行。 – tugberk 2011-03-29 17:29:48

+0

這實際上是我想刪除...對不起 – MrM 2011-03-29 17:41:47

+0

稍等片刻,你是在談論數據庫中的表或數據集中的表? – Doliveras 2011-03-29 18:04:00

回答

2

我會寫一個查詢做這一切在一個聲明中

delete from TableA 
where ColID in (select colid from tableB) 
+0

不是linq,但是又快又簡單:-D – Doliveras 2011-03-29 17:41:40

+0

我不認爲我可以在cs文件上做到這一點...... – MrM 2011-03-29 17:44:49

+0

如果您使用的是數據庫,則可以使用sqlCommand輕鬆執行此語句或OleDBCommand對象 – Doliveras 2011-03-29 18:02:52

0

保持實際上不會刪除數據,假設這是你想要的。 這樣您只能從您的數據表對象中的行集合中刪除行。

下一步是實際提交對數據庫的更改。再次,假設這是你正在尋找的。

0

你是什麼意思刪除?你能指出一點更好的你想要什麼? 要從表格中刪除整行,還是隻刪除一個單元格? - 基於什麼? 你的第一篇文章很不清楚。

所以你有兩張桌子。第一個有所有的數據,第二個有一些。如果來自table2的任何數據存在於table1中,則必須刪除表1中的這些數據?我對嗎?

您可以通過這兩個表(所以雙迴路)的行中循環:

foreach (DataRow dr1 in table1.Rows) 
     { 
      foreach (DataRow dr2 in table2.Rows) 
      { 
       if (dr1[0].ToString() == dr2[0].ToString()) 
       { 
        table1.Rows.Remove(dr1); 
        break; 
       } 
      } 
     } 
+0

我期待從table2(所有數據)中刪除table1(某些數據)中的行。對於混淆感到抱歉 – MrM 2011-03-29 17:46:40

0

我想通了。我將以下內容添加到table2的table while循環中(表中的行將被刪除)。

while (myDataReader.Read()) 
{ 
    DataRow drNew = DataTable.NewRow(); 
    drNew["ID"] = myDataReader["ID#"].ToString().Trim(); 
    drNew["Name"] = myDataReader["NAME"].ToString().Trim()); 
    ... 
    DataRow[] badRow = DataTable.Select(
      "ID='" + drNew["ID"] + "' and Name='" + drNew["Name"] + "'"); 
    if(badRow.Length >0) 
     DataTable.Rows.Remove(badRow[0]); 
} 
0

如果你想要的是刪除使用存儲在另一個數據表中的鍵可以重複表與鍵從數據表中的某些行,找到要刪除的...做表的關鍵。

實施例:

考慮TABLE2與(table1ID,COL2,COL3,COL4)柱和用TABLE1(ID,COL2,COL3)列。 你可以這樣做:

foreach (TABLE2row t2r in TABLE2) 
{ 
    t1r=TABLE1.FindByID(t2r.Table1ID); 
    if (t1r!=null) 
    { 
     t1r.delete(); 
    } 
} 

這是考慮到您使用的主鍵類型化數據集。

0

從dtCMATM表中刪除不在dtAllowedList表中的所有記錄。

 private void GetProperData() 
    { 
     DataTable dtAllowedList = someclass.somefunctiontogetdata(....); 
     DataTable dtCMATM = someclass.somefunctiontogetdataTobeRemovedLaterOn(.........); 
     DataTable tblCloned = new DataTable(); 
     tblCloned = dtCMATM.Clone(); 

     foreach (DataRow dr2 in dtAllowedList.Rows) 
     { 
     DeleteRowsFromDataTable(ref tblCloned, dtCMATM, "AssignTo", dr2[0].ToString()); 
     } 

     tblCloned.AcceptChanges(); 
     dtCMATM = tblCloned; 
     dtCMATM.AcceptChanges();  

    } 

    private static void DeleteRowsFromDataTable(ref DataTable tblCloned, DataTable dtCMATM, string ColumnName, string columnValue) 
    {   
     string strExpression = "AssignTo = '" + columnValue + "' "; 
     dtCMATM.DefaultView.RowFilter = strExpression; 
     dtCMATM = dtCMATM.DefaultView.ToTable(); 

     if (dtCMATM.Rows.Count > 0) 
     { 
      tblCloned.ImportRow(dtCMATM.Rows[0]); 
     }   
    }  
相關問題