从DataTable.Select获取第一个结果而不使用For Each循环

时间:2013-04-02 05:45:50

标签: vb.net

以下For循环根本不循环。没有For循环,是否有任何优化的方法来做同样的事情:

For Each drID As DataRow In dttable.Select("ID=1 and FirstName='Karthik'", "ID")
    NewID = CInt(drID.Item("ID"))
    Exit For
Next

我尝试用

更改此内容
NewID = IIf(dt.Select("ID=1 and FirstName='Karthik'", "ID").Length > 0, dt.Select("ID=1 and FirstName='Karthik'", "ID")(0).Item("ID"), 0)

是否有任何其他优化方法可以更改此For循环,甚至根本不循环。

1 个答案:

答案 0 :(得分:3)

您希望在不使用"ID"循环的情况下从DataTable的第一行获取For Each。您可以使用LINQ FirstOrDefault方法执行此操作 - 它返回集合的第一个元素或所有引用类型的默认值(Nothing)它集合没有得到结果:

Dim firstRow As DataRow = dttable.Select("ID=1 and FirstName='Karthik'", "ID").FirstOrDefault()

If Not firstRow Is Nothing Then
    NewID = CInt(firstRow.Item("ID"))
Else
    NewID = 0
End If

您需要在文件顶部Imports System.Linq才能使其正常运行。

或没有LINQ:

Dim results As DataRow() = dttable.Select("ID=1 and FirstName='Karthik'", "ID")

If results.Length > 0  Then
    NewID = CInt(results(0).Item("ID"))
Else
    NewID = 0
End If