繁体   English   中英

接下来不循环在vb.net

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM