Vb.net 在datatable中查找并获取行索引 数据表。选择问题
我有这样的简单数据表Vb.net 在datatable中查找并获取行索引 数据表。选择问题,vb.net,datatable,Vb.net,Datatable,我有这样的简单数据表 | 1 | 2 | 3 | |------|------|------| | 1966 | 6544 | 1967 | | 9560 | 3339 | 4968 | | 0 | 9400 | 1765 | | 0 | 5479 | 6701 | 例如,我想检查列“1”中是否已经存在1966,如果存在,则获取行索引 我是这样写代码的 Dim search() As DataRow = table.Select(" '" & i
| 1 | 2 | 3 |
|------|------|------|
| 1966 | 6544 | 1967 |
| 9560 | 3339 | 4968 |
| 0 | 9400 | 1765 |
| 0 | 5479 | 6701 |
例如,我想检查列“1”中是否已经存在1966,如果存在,则获取行索引
我是这样写代码的
Dim search() As DataRow = table.Select(" '" & i & "' = '" & value & "' ")
'where i is a integer from 1 to 3 and value is a biginteger
If search.Count > 0 Then
'get row index
Else
Console.WriteLine("not found")
End If
您的查询当前试图以字符串形式查询数字字段,因此,如果您要查询的datatable列确实是整数,则正确的语法为:
Dim search() As DataRow = table.Select(i.ToString & " = " & value.ToString)
列名和数字周围没有单引号。然后,要获取索引,需要在表中搜索返回的行的索引。DataRowCollections有一种方法可以做到这一点,您只需要迭代查询的返回:
For Each dr As DataRow In table.Select(i.ToString & " = " & value.ToString)
MsgBox(dr.Table.Rows.IndexOf(dr).ToString)
Next dr
使用现有循环,只需在表中查找行:
Dim ndx As Int32
Dim rows = dtSample.Select("Id = 42")
If rows.Count > 0 Then
ndx = dtSample.Rows.IndexOf(rows(0))
End If
Return ndx
使用扩展方法,可以对其进行压缩:
Dim ndx = dtSample.AsEnumerable().
Where(Function(q) q.Field(Of Int32)("Id") = 42).
Select(Function(z) dtSample.Rows.IndexOf(z)).
ToArray()
在这种情况下,
ndx
将是一个数组,当不存在匹配项时将为空。除非行索引包含在行本身的值中,否则您必须放弃Select方法,并使用基于光标的方法。如果找到匹配项,此示例将停止循环:
Dim intTargetIndex As Integer = -1
Dim intCursor As Integer = 0
Do Until intCursor = table.Rows.Count OrElse intTargetIndex > -1
If table.Rows(intCursor)(0).ToString() = value.ToString() Then
intTargetIndex = intCursor
End If
intCursor += 1
Loop
代码如下:
Dim rowIndex = dt.AsEnumerable().[Select](Function(r) r.Field(Of String)("Column_Name")).ToList().FindIndex(Function(col) col = "Find_Key")
IndexOf的使用很好。我仍然不能使用table。选择
Dim rows=table。选择(“1=1966”)
并使用类似这样的条件“如果rows.Count>0,则
@PUROTIX您的代码对我的问题很好,但它是否比使用table.Select好?”@我猜这会比表快一点。选择方法。首先,它将在找到单个匹配项时停止(类似于.Any()vs.Count()>0),其次.IndexOf可能更昂贵。最好的确定方法是分析这两种方法。请遵循指南。你的回答漏掉了一些澄清。这对我很有效。正是我需要的,谢谢!我注意到,如果索引不存在,它会将索引返回为-1。所以你只需要做一个“If”语句,如果索引大于0,那么…你需要从那里得到什么。