2012-12-20 73 views
2

我使用我不能亂動查詢當前拉動信息:緊接着DataTable.Select.Where VB.Net - 刪除行

Dim dt As DataTable = BLL.GetData(variable).Tables(0) 

,我刪除任何記錄,其中現場開始特定值:

For Each dr As DataRow In dt.Rows 
    If dr.Item(2).ToString().StartsWith("value") Then 
     dr.Delete() 
    End If 
Next 

我真正想要做的是一樣的東西:

dt.Select.Where(field1 => field1.StartsWith("value")).Delete() 

我知道這不是它的語法,我可能與它的樣子很不一樣。 For Each工作正常,我只是想「簡化」它。任何想法?任何和所有的幫助表示讚賞。

回答

2

其實,你最初的代碼可能是最乾淨和最直接的。

要使用LINQ刪除項目,首先需要將它們讀入一個單獨的集合,然後遍歷該集合並在每條記錄上調用Delete。如果您寧願走這條路線,您可以嘗試:

Dim records = dt.Rows.Where(Function(r) r.StartsWith("value")).ToList() 
For Each r In records 
    r.Delete() 
Next 
+0

不能你只是不添加到您的查詢:...不r.StartsWith .... – Steve

+0

@ user574632 - 如果你只是想要一個不以「value」開頭的行的集合,那麼是的。但是OP明確表示他們想要刪除這些行。 –

+0

嗯,兩種方式都可能起作用。這是預先繪製到屏幕上,所以要麼執行NOT或刪除它們可能會起作用。 – XstreamINsanity

0

我認爲您正在尋找的答案來自Microsoft。 https://msdn.microsoft.com/en-us/library/det4aw50(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

昏暗的表作爲數據表= DataSet1.Tables( 「訂單」)

' Presuming the DataTable has a column named Date. 
Dim expression As String 
expression = "Date > #1/1/00#" 
Dim foundRows() As DataRow 

' Use the Select method to find all rows matching the filter. 
foundRows = table.Select(expression) 

Dim i As Integer 
' Print column 0 of each returned row. 
For i = 0 to foundRows.GetUpperBound(0) 
    Console.WriteLine(foundRows(i)(0)) 
Next i