[英]Next not looping in vb.net
我创建了一个函数:
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条记录,但该函数仅返回第一条记录。 任何帮助将不胜感激。
UPDATE
显然,Return 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
您的循环中有一个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
如前所述, 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
在循环内部,您可以Return
,因此可以完全退出该函数(尤其是循环)。
如果不Return
,则不会退出该函数,因此您将有机会继续循环。
您真的应该启用Option Strict On。 由于我们不知道app_id的数据类型是什么,并且您已将Option Strict Off设置为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.