如何從VB.NET 2008中的數據表中刪除多行而不循環?如何從VB.NET 2008中的數據表中刪除多行?
- 我不想從數據庫中刪除。
- 我想從本地數據表中刪除。
- 我知道
Select
方法,也知道Remove
並在方法中刪除。但是這需要循環刪除數據表中的行。
我有40000行,我想從該數據表中刪除選定的1000行。
如何從VB.NET 2008中的數據表中刪除多行而不循環?如何從VB.NET 2008中的數據表中刪除多行?
Select
方法,也知道Remove
並在方法中刪除。但是這需要循環刪除數據表中的行。我有40000行,我想從該數據表中刪除選定的1000行。
我不知道這可以用直接的方式完成。數據表上沒有刪除命令會執行此操作。
你可以嘗試這樣的事情。您選擇要保留到臨時表中的記錄,清除原始表,然後將臨時表合併回原始表中。
Dim dtTemp As DataTable = ds.Tables("YourTable").Select("RecordsToKeep='This'").CopyToDataTable
ds.Tables("YourTable").Clear()
ds.Tables("YourTable").Merge(dtTemp)
dtTemp.Dispose()
這是我能想到的問題的最佳答案。您似乎可能以不尋常的方式使用數據表。您通常最好不要將記錄填入開頭,要麼在將內容保存到目標時將其過濾掉。無論是XML文件,SQL還是其他。
當然,循環方法將是最有效的。這可能不是最快的方法,但對於只有4K行,這可能夠好。
在某些情況下,我們總是可以編寫存儲過程來優化ADO.NET實體框架或LINQ to SQL往返。缺點是該模型開始看起來有點不一致。 我也懷疑是否有更好的方法:)
如果您使用LINQ to SQL,您可以致電DeleteAllOnSubmit()。但是,這將爲每個被刪除的實體提交DELETE語句,這非常低效。您始終可以使用fork LINQ to SQL或使用存儲過程。
順便說一句,你是問題是非常通用的。我的第一個傾向是建議使用WHERE子句。
可能會使用DataView會有所詭計。例如,您可以過濾出要保留到DataView中的行,將視圖轉換爲表格並處理初始表格。然後你的桌子上有你需要的行。
Dim view As DataView = YourTable.DefaultView
view.RowFilter = "YourFilterColumn = 1259"
Dim tblNew as Datatable = view.ToTable
YourTable.Dispose
讓我知道它是否適合你。
在ADO.NET命令對象中使用SQL語句。 Obvoiusly你想刪除的行將有一些共同點。
Delete From MyTable where mycolumn='XYZ' and thisColumn='ABC'
我不知道這是否會正式資格作爲使用一個循環,但這裏是使用LINQ的解決方案:
dt.BeginLoadData();
(from row in dt.AsEnumerable()
where row.Field<string>("MyColumn" ) == "DeleteValue"
select row).ToList().ForEach(row => row.Delete());
dt.EndLoadData();
dt.AcceptChanges();
TBH,我不知道是有辦法做到這一點,而無需通過循環某些級別的行。你可以循環刪除那些你不想要的行,或者創建一個新的表格,除了你不想要的行外,其他的都會被填充。但是,應該指出的是,即使在後面的情況下,NET可能循環遍歷行以確定該行是否應該包含在守護程序表中。
我認爲你應該使用LINQ。您將從數據集中獲取數據,然後編寫一個LINQ查詢來刪除符合條件的行。
所以你不需要循環。
以下是一些可能對您有幫助的鏈接。
感謝布雷默,這是刪除行的DataTable中的最佳代碼,對我來說是快速的方法:
Public Sub BorrarFilasEnDatatable(ByRef dtDatos As DataTable, ByVal strWhere As String)
Dim dtTemp As New DataTable
Dim filas As DataRow()
filas = dtDatos.Select("NOT(" & strWhere & ")")
dtDatos.Clear()
If filas.Count > 0 Then
dtTemp = filas.CopyToDataTable
dtDatos.Merge(dtTemp)
End If
dtTemp.Dispose()
End Sub
'call me method for delete rows
Me.BorrarFilasEnDatatable(dt1, "Id<10")
你怎麼確定哪個10 4000行的00要刪除? – JeffO 2010-05-06 12:13:37
這是我的問題是,有沒有什麼辦法來確定刪除行? – KuldipMCA 2010-05-10 09:45:15
你可以添加你的問題,你用哪個.NET類來表示內存中的數據?它是DataSet還是其他類?或者我可以重新提出這個問題:你是使用SqlDataAdapter還是LinkToSql或Entity Framework來訪問數據庫?對於每種方式,都可以編寫解決方案,但如果您只需要一個,我不想編寫不同版本的代碼。數據庫表(2-3字段)的一個小例子也可能非常好,那麼我將在我的代碼示例中使用這些字段。 – Oleg 2010-05-10 19:16:31