2

我目前正在使用不允许篡改的查询来提取信息:

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工作正常,我只是想“简化”它。任何想法?任何和所有的帮助表示赞赏。

4

2 回答 2

3

实际上,您的初始代码可能是最干净和最直接的。

要使用 LINQ 删除项目,您首先需要将它们读入一个单独的集合,然后遍历该集合并在每条记录上调用 Delete。如果你宁愿走那条路,你可以尝试:

Dim records = dt.Rows.Where(Function(r) r.StartsWith("value")).ToList()
For Each r In records
    r.Delete()
Next
于 2012-12-20T19:00:04.803 回答
0

我认为您正在寻找的答案来自微软。https://msdn.microsoft.com/en-us/library/det4aw50(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

暗表作为 DataTable = DataSet1.Tables("Orders")

' 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
于 2017-07-03T20:43:18.320 回答