2017-01-08 3 views
0

У меня есть этот код, написанный вернуть коллекцию объекта со свойствами следующим образом:Размещение коллекцию значений в Для каждого цикла ...

Public Shared Function Create() As Collection(Of Element) 
    Return New Collection(Of Element)() From { _ 
    New Element() With { _ 
     .Group = 1, _ 
     .Period = 1, _ 
     .Name = "Hydrogen" _ 
    }, _ 
    New Element() With { _ 
     .Group = 18, _ 
     .Period = 1, _ 
     .Name = "Helium" _ 
    }, _ 
    New Element() With { _ 
     .Group = 1, _ 
     .Period = 2, _ 
     .Name = "Lithium" _ 
    } 
    } 
End Function 

Теперь я хотел бы получить эти значения из базы данных, но я не могу понять, как переформатировать код. Моя процедура возвращения должна быть примерно такой:

Public Shared Function CreateDB() As Collection(Of Element) 

     Using db As New DataClassesDataContext(ACCCon) 

      Dim rows = (From row In db.PeriodicTableQs 
         Order By row.ID 
         Select row).ToList() 
      For Each s In rows 
       <<collect the elements here as result>> 
       <<eg, New Element() With {.Group = s.Group}>> 
      Next 

     End Using 

     Return Result 

    End Function 

Спасибо!

+1

Почему бы не вернуть 'row', который является' List (Of PeriodicTableQs) ', вместо приведения его вручную к другому типу? – OneFineDay

+0

Спасибо! Я думал об избежании перезаписи большого количества кода, использующего этот класс ... Это решает его; но все равно будет очень рад узнать, как переписать цикл, у меня есть другие места, которые я знаю, мне обязательно нужно будет заменить массивы вызовами базы данных :) –

ответ

1

Попробуйте это:

Public Shared Function CreateDB() As Collection(Of Element) 
    Dim ACCCon As String = "ConnectionString" 

    Using db As New DataClassesDataContext(ACCCon) 
    Dim List = db.PeriodicTableQs. 
     OrderBy(Function(Q) Q.ID).ToList. 
     Select(Function(row)       
       Return New Element With {       
       .Group = row.Group,       
       .Name = row.Name,       
       .Period = row.Period       
       }       
      End Function) 
    End Using 

    Return New Collection(Of Element)(List) 
End Function 
+0

Спасибо, InteXX. Кажется, что я искал, но я получаю эту ошибку: «Заявление Lambdas не может быть преобразовано в деревья выражений» в начале «Функция (строка)». Я добавил вызов в базу данных, возвращающую строку выше «Dim List ...» часть –

+1

@HanningtonMambo помещает 'ToList' перед' Select' – Fabio

+1

@HanningtonMambo: Fabio правильно, я проверил свой образец с помощью макета 'DataClassesDataContext' класс, а не настоящий «DataContext». Я отредактировал свой ответ соответственно. – InteXX

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

  • Нет связанных вопросов^_^