我在我的vb .net应用程序中使用成员资格和角色进行身份验证。我们在应用程序中有大约5个角色,某些角色填写特定的配置文件值。示例是角色是商店,而配置文件值是商店编号。显然,如果你在总部工作,你没有商店号码,所以我不关心它。每家商店也可以有超过1名员工。
我需要获取特定商店编号的用户。意思是我只希望属于商店编号101的用户显示该列表。我们现在这样做的方式是通过所有用户并将符合条件的用户添加到排序列表中。这有用,但问题是当你开始传递大约3,000个用户时。它变得慢慢变得有益。
你们怎么会找到一种不同的方式呢?我真的不想做自定义存储过程或更改底层类,因为我害怕在更新版本的.net上打破它们会改变成员资格和角色。
答案 0 :(得分:1)
这实际上是你想要在SQL中过滤的东西。我认为没有任何技巧可以绕过您的数据线性扫描并获得您想要的结果。
如果在SQL中执行此操作不是一个选项,那么您可以避免创建第二个列表,只需对主用户数组进行排序,并让显示只显示您关注的那些。这至少会节省内存复制时间。
答案 1 :(得分:0)
您正在使用内置的.NET角色管理器保存到我接受的SQL Server实例吗?当您正在查看评估标准时,您的用户对象采用什么格式?如果您发布代码示例,我有一个想法...
答案 2 :(得分: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方面这样做的原因是我会非常依赖会员和角色不会改变的事实。