SQL LINQ查询:选择特定列

时间:2014-05-13 18:51:49

标签: sql vb.net linq

今天我需要在VB.net中将LINQ查询写入数据库表,但我不熟悉SQL / LINQ。下面这个函数用来填充一个字符串列表,其中包含所有可能的"问题"在数据库表中与QuestionType匹配。

但是,每当我匹配时,我只想选择一个单独的列,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在我的SQL数据库中定义为varchar,所以我知道它绝对是一个字符串。我不是试图将QuestionText设置为字符串列表,而是将其添加到字符串列表的末尾。

1 个答案:

答案 0 :(得分: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