2008-09-16 26 views
1

私のVB.NETアプリケーションでは、認証にメンバーシップと役割を使用しています。特定の役割を持つ特定のプロファイル値を記入して、アプリケーションに約5つの役割があります。例はロールがストアであり、プロファイル値がストア番号です。明らかにあなたが本部のために働くならば、私はそれを気にしないので、店舗番号はありません。各店舗には、1人以上の従業員を配置することもできます。プロファイル内の特定の値を持つユーザーを取得する

特定の店舗番号のユーザーを取得する必要があります。意味するのは、101番の店舗に所属するユーザーだけがそのリストを表示したいということです。私たちがこれをやっているやり方は、すべてのユーザーを通過して、基準に合ったユーザーをソートされたリストに追加することです。これは機能しますが、約3000人のユーザーを過ごすようになると問題になります。それはちょうど良いものであるために遅くなる。

あなたはどうやってそれをやっているのですか?カスタムストアドプロシージャを実行したり、基になるクラスを変更したりするのは、実際にはメンバーシップやロールを変更した後のバージョンの.netを壊すことを恐れているからです。

答えて

0

私はそれを取るSQL Serverインスタンスに保存する組み込みの.NETロールマネージャを使用していますか?あなたが現在基準を評価するために見ているときに、あなたのユーザーオブジェクトはどのような形式ですか?コードサンプルを投稿すると、私は考えを持っています...

1

これは本当にSQLでフィルタリングしたいものです。私はあなたのデータのリニアスキャンを行い、あなたが望む結果を得ることに慣れていないと思う。

SQLでこれを行うのはオプションではない場合は、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側でそれをやりたいのではない理由は、メンバーシップと役割が変わらないという事実に大きな依存があるからです。

関連する問題