抓取具有特定值的用户
问题描述:
我在我的vb.net应用程序中使用成员身份和角色进行身份验证。我们在应用程序中约有5个角色,其中某些角色填写了特定的配置文件值。示例是角色是商店,配置文件值是商店编号。显然,如果你在总部工作,你没有商店号码,所以我不关心它。每家商店也可以有超过1名员工。抓取具有特定值的用户
我需要获取特定商店编号的用户。这意味着我只想要属于商店号码101的用户显示该列表。我们现在这样做的方式是遍历所有用户,并将符合标准的用户添加到排序列表中。这个功能,但问题是,当你开始传递大约3000用户左右。只是慢慢地变得没有好处。
你们会如何找到不同的方式?我真的不想做自定义存储过程或更改基础类,因为我担心它会打破更高版本的.net网站,从而改变成员资格和角色。
答
您正在使用内置的.NET角色管理器保存到SQL Server实例中吗?当您正在查看它们以评估标准时,您的用户会使用什么格式?如果你发布代码示例,我有一个想法...
答
这真的是你想在SQL中过滤的东西。我不认为有任何技巧可以绕过数据的线性扫描并获得您想要的结果。
如果在SQL中这样做不是一个选项,那么也许你可以避免创建第二个列表,并只对你的主用户数组进行排序,并让显示器只显示你关心的人。这至少可以节省内存拷贝时间。
答
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方面做这件事的原因是,我将非常依赖于成员资格和角色不会改变的事实。