我创建了一个函数:
Public Shared Function appid()
Dim appidQ = From v In db_apps.app_users
Where v.NT_id = System.Environment.UserName
Select v
For Each v In appidQ
Return Convert.ToInt32(v.app_id)
Next v
Return appid()
End Function
我正在尝试将每个app_id返回给用户将其放置在viewdata中(仅用于测试我最终将此信息放在cookie中。)现在这应该返回2条记录,因为我目前有2条记录,符合appidQ中指定的查询条件。在调试时,appidQ确实返回了两个记录。然而,当我再进一步时,“For Each”不会循环,所以虽然appidQ返回2条记录,但该函数只返回第一条记录。任何帮助将不胜感激。
更新
显然,返回appid()会导致它退出循环,这是我的新代码:
Public Shared Function appid()
Dim appidQ = From v In db_apps.app_users
Where v.NT_id = System.Environment.UserName
Select v
For Each v In appidQ
Dim var = v.app_id
Next v
Return appid()
End Function
但它仍然不能满足我的需要。我需要它来返回
的结果For Each v In appidQ
Dim var = v.app_id
Next v
答案 0 :(得分:1)
你的循环中有一个Return
语句。
Return
位于函数级别,因此循环(和函数)将在循环中首次传递后退出。
你应该做那样的事(我不是VB人)。
Public Shared Function appid()
Return (From v In db_apps.app_users
Where v.NT_id = System.Environment.UserName
Select v).ToList()
.Select(Function(p) Convert.ToInt32(p.app_id)).ToList()
End Function
然后在你看来,如果你正在使用ViewData,那就是这样的。
For Each id As Int32 In CType(ViewData("foo"), List(Of Int32)
...
Next
答案 1 :(得分:1)
正如已经注意到的那样,应该在循环之后移动return
语句以获得所有结果。
Public Shared Function appid() As List(Of Int32)
Dim appidQ = From v In db_apps.app_users
Where v.NT_id = System.Environment.UserName
Select v
Dim result As New List(Of Int32)
For Each v In appidQ
result.Add(Convert.ToInt32(v.app_id))
Next v
Return result
End Function
编辑
从您的评论中可以看出,您需要的是列表的字符串表示形式。当你尝试ToString()
扩展时,它会返回对象的名称(例如:System.Collections.Generic.List1[System.Int32]
所以我不知道是否有更有效的方法,但这应该有效:
Public Shared Function appid() As String
Dim appidQ = From v In db_apps.app_users
Where v.NT_id = System.Environment.UserName
Select v
'Create a String representation
Dim stringList As New System.Text.StringBuilder
Dim counter As Integer = 0
For Each v In appidQ
stringList.Append(v.app_id.ToString())
'Separator
If Not counter = appidQ.Count - 1 Then
stringList.Append("; ")
End If
counter += 1
Next
Return stringList.ToString
End Function
答案 2 :(得分:0)
在循环内部,您Return
,因此您完全退出该函数(特别是循环)。
如果您没有Return
,则不会退出该功能,因此您将有机会继续循环播放。
答案 3 :(得分:0)
你真的应该有Option Strict On。由于我们不知道app_id的数据类型是什么,并且您有Option Strict Off,我们无法确定我们应该返回什么。
试试这个:
Public Shared Function appid()
Return (From v In db_apps.app_users
Where v.NT_id = System.Environment.UserName
Select v.app_id).ToList()
End Function
如果它是强类型的会更好,但这应该会给你你想要的结果。
编辑:如果你需要转换为Int32,试试这个:
Public Shared Function appid()
Return (From v In db_apps.app_users
Where v.NT_id = System.Environment.UserName
Select v).ToList()
.Select(Function(p) Convert.ToInt32(p.app_id)).ToList()
End Function