【问题标题】:Grabbing Users with a specific value in their profile在个人资料中获取具有特定值的用户
【发布时间】:2010-09-09 16:42:19
【问题描述】:

我在我的 vb .net 应用程序中使用成员资格和角色进行身份验证。我们在应用程序中有大约 5 个角色,其中某些角色填写特定的配置文件值。示例是角色是商店,配置文件值是商店编号。显然,如果您为总部工作,您没有商店编号,所以我不在乎。每个商店也可以有超过 1 名员工。

我需要获取特定商店编号的用户。这意味着我只希望属于商店编号 101 的用户显示该列表。我们现在这样做的方式是遍历所有用户并将符合条件的用户添加到排序列表中。这个功能,但问题是当你开始传递大约 3,000 个用户时。做任何好事都会变得很慢。

你们会如何找到不同的方法呢?我真的不想进行自定义存储过程或更改底层类,因为我担心它们会在更高版本的 .net 上破坏成员资格和角色。

【问题讨论】:

    标签: .net membership roles


    【解决方案1】:
        Public Shared Function LoadALLUsersInRole(ByVal Code As Integer, ByVal Role As String) As ArrayList
            Dim pb As ProfileBase
            Dim usersArrayList As New ArrayList
            Dim i As Integer
            Dim AllUsersInRole() As String = Roles.GetUsersInRole(Role)
    
            For i = 0 To AllUsersInRole.Length - 1
    
                pb = ProfileBase.Create(AllUsersInRole(i), True)
    
                'Check to see if the current user in the collect belongs to this Store.
                If CType(pb.GetPropertyValue("Store.Code"), Integer) = Code Then                    
                        usersArrayList.Add(AllUsersInRole(i))                   
                End If
                pb = Nothing
            Next
    
            Return usersArrayList
        End Function
    

    这是我如何做的示例代码。我不想在 SOL 方面这样做的原因是,我会非常依赖成员资格和角色不会改变这一事实。

    【讨论】:

      【解决方案2】:

      这确实是您想要在 SQL 中过滤的东西。我认为没有什么技巧可以绕过对数据进行线性扫描并获得所需的结果。

      如果不能在 SQL 中执行此操作,那么也许您可以避免创建第二个列表,而只需对您的主用户数组进行排序,并让显示器只显示您关心的那些。这样至少可以节省内存复制时间。

      【讨论】:

        【解决方案3】:

        您使用的是内置的 .NET 角色管理器,它保存到我接受的 SQL Server 实例中?当您当前查看用户对象以评估标准时,您的用户对象是什么格式的?如果您发布代码示例,我有一个想法...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-07-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多