2008-09-16 108 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方面做這件事的原因是,我將非常依賴於成員資格和角色不會改變的事實。