2013-04-02 6 views
2

Цикл ниже For не петляет вообще. Есть ли оптимизированный способ сделать то же самое без для цикла:Получить первый результат из DataTable.Select without 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) 

Есть ли какой-либо другой оптимизированный способ изменить этот цикл, который не даже петли все.

+1

Привет, как он стоит, это, скорее всего, будет закрыто. Подумайте о пересмотре своего вопроса, чтобы сделать его более сосредоточенным и понятным. В настоящее время трудно сказать, что задают. Попробуйте изменить название. –

+1

@AlastairPitts Я думаю, что вопрос достаточно ясен - он хочет сделать то же самое (возьмите '' ID ''из первого результата вызова метода .Select()' без цикла 'For Each'. – MarcinJuraszek

ответ

3

Похоже, вы хотите получить "ID" из первой строки в вашем DataTable без использования For Each loop. Вы можете сделать это с помощью 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. используемая Framework 2.0? –

+0

Несомненно - просто сохраните массив 'DataRow()' из массива 'Select' в переменной. – MarcinJuraszek

Смежные вопросы