2008-09-16 65 views
1

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

我需要获取特定商店编号的用户。这意味着我只想要属于商店号码101的用户显示该列表。我们现在这样做的方式是遍历所有用户,并将符合标准的用户添加到排序列表中。这个功能,但问题是,当你开始传递大约3000用户左右。只是慢慢地变得没有好处。

你们会如何找到不同的方式?我真的不想做自定义存储过程或更改基础类,因为我担心它会打破更高版本的.net网站,从而改变成员资格和角色。

回答

0

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

1

这真的是你想在SQL中过滤的东西。我不认为有任何技巧可以绕过数据的线性扫描并获得您想要的结果。

如果在SQL中这样做不是一个选项,那么也许你可以避免创建第二个列表,并只对你的主用户数组进行排序,并让显示器只显示你关心的人。这至少可以节省内存拷贝时间。

0
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方面做这件事的原因是,我将非常依赖于成员资格和角色不会改变的事实。