今天我需要在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设置为字符串列表,而是将其添加到字符串列表的末尾。
答案 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