2014-05-13 4 views
0

Сегодня мне нужно писать запросы LINQ в VB.net в таблицу базы данных, но я новичок в SQL/LINQ. Эта функция ниже предназначена для заполнения списка строк со всеми возможными «Вопросами» в таблице базы данных, которые соответствуют типу QuestionType.SQL LINQ Query: выбор конкретного столбца

Однако, я хочу только выбрать один столбец, столбец QuestionText, а не все данные, всякий раз, когда у меня есть совпадение.

Public Shared Function RetrieveQuestions(ByVal QuestionType) As List(Of String) 
    Dim db As New DBDataContext() 
    db.CommandTimeout = 300 
    Dim ListOfQuestions As List(Of String) = New List(Of String) 
    While True 
     Dim questionList As List(Of Question) = db.Questions.ToList 
     Dim question As List(Of String) = (From q As Question In questionList Where q.FormType = QuestionType Select q.QuestionText).ToList 
     Dim i As List(Of String) = question 
     If (question IsNot Nothing) Then 
      ListOfQuestions(ListOfQuestions.Count) = i.QuestionText //ERROR 
     Else 
      Exit While 
     End If 
    End While 
    Return ListOfQuestions 
End Function 

В вышеприведенной функции возникает ошибка при попытке обновить список с помощью нового QuestionText. "QuestionText не является членом System.Collections.Generic.List (Of String)". QuestionText определяется как varchar в моей базе данных SQL, поэтому я знаю, что это определенно строка. Я не пытаюсь установить QuestionText в список строк, а скорее добавлю его в конец списка строк.

ответ

1

Прямой ответ: вам нужно будет положить весь блок If (question IsNot Nothing) Then в петлю, как For Each. Поскольку компилятор правильно информирует - переменная i содержит весь список, а не один из его элементов. Возможно, вы забыли, что вы оставили запрос LINQ?

Лучшее решение: я считаю, что вы можете просто использовать AndAlso q.QuestionText IsNot Nothing - это избавляет вас от необходимости выделять новый список и заполнять его один за другим - следующий код должен делать трюк.

Public Shared Function RetrieveQuestions(ByVal QuestionType) As List(Of String) 
    Dim db As New DBDataContext() 
    db.CommandTimeout = 300 

    Dim ListOfQuestions As List(Of String) = (
      From q As Question In db.Questions.ToList 
      Where 
        q.FormType = QuestionType 
        AndAlso q.QuestionText IsNot Nothing 

      Select q.QuestionText 
    ).ToList 

    Return ListOfQuestions 
End Function