我有类似的问题,如此链接,
Search DataTable with values from another table
蒂姆已经回答了这个问题。 Dim strings = From row In PlTable Select row.Field(Of String)(0)
Dim found = From row In table.AsEnumerable
Where strings.Any(Function(s) row.Field(Of String)("Name").Contains(s))
Select row
Return found.CopyToDataTable()
由于我是新手,所以请帮忙。在我的P1Table中,只有一列有许多值。这些代码是否为P1Table的每个值返回一个新的数据表?此外,在我的P1Table中,ePlTable列的字符串值仅匹配表中列的前3个字符。这些代码仍然有用吗?最后一个问题,当我调试它时,它会显示参数" s"在函数只有一个字符?为什么?感谢
答案 0 :(得分:0)
根据您在评论中所写的内容,虽然我很困惑为什么您会这样想,并认为您应该更多地查看您的代码,看看是否更好/ neater解决方案(例如,使用DataViews
that automatically allow for filtering)。
我这样做的方式如下:
Dim ReturnedTables As New List(Of DataTable)
Dim strings = From row In PlTable Select row.Field(Of String)(0)
For Each s As String In strings
Dim Retval = From row In table.AsEnumerable
Where row.Field(Of String)("Name").Contains(s)
Select row
If Retval.Count > 0 Then ReturnedTables.Add(Retval.CopyToDataTable)
Next
这将填充变量ReturnedTables
,它将包含您提到的单独的DataTables。
再次注意,这将是非常占用大量内存的,因为您实际上为循环的每次迭代创建了一个单独的数据表(而不是过滤),但它应该按照您的要求执行。
希望这有帮助!
其他强>
根据下面的问题,要获取特定数据表中的行数,它看起来会很长:
ReturnedTables(i).Rows.Count
要获取特定字段中的所有值,您将使用与上面使用的完全相同的语法/逻辑来创建strings
可枚举。
希望有意义!!