2013-04-02 65 views
2

下面的For循環根本不循環。是否有任何優化的方式做同樣沒有For循環:從DataTable獲取第一個結果,不選For Each循環

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

嗨,因爲它的立場,這很可能會被關閉。考慮修改你的問題,使其更加專注和易於理解。目前,很難說出要問什麼。嘗試改變標題。 –

+1

@AlastairPitts我認爲問題已經足夠清楚了 - 他想要做同樣的事情(從「.Select()」方法調用的第一個結果中取得「ID」'而不用'For Each'循環。 – MarcinJuraszek

回答

3

看起來像你想從你的DataTable的第一行得到"ID"而不使用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 
+0

可以不使用Linq。使用的框架是2.0? –

+0

當然 - 只需將'Select'方法中的整個DataRow()'數組保存到一個變量中。 – MarcinJuraszek