4

Membership.GetAllUsers()を使用してユーザーリストを取得しています。一部のアカウントに重複するメールのフラグを立てる必要があるため、リストをメールアドレスで並べ替えて返したいのですが。

Membership.GetAllUsers()は、デフォルトでユーザー名で並べ替えているようです。この動作を変更する方法はありますか?

4

3 に答える 3

11

あなたがMembershipUserCollection:ではなく一般的なリストで生きることができるなら

Membership.GetAllUsers().Cast<MembershipUser>().OrderBy(x => x.Email).ToList();

OrderBy(x => x.Email, StringComparer.OrdinalIgnoreCase)大文字と小文字を区別しない種類の電子メールアドレスが必要な場合に使用します。

メンバーシップコードは、実際にはジェネリックよりも前のものであるため(.NET1.1開発から.NET2.0に統合された)、MembershipUserCollectionジェネリックインターフェイスを実装していません。

以前の質問を考えると、他のLINQスタイルの操作に興味があるかもしれません。たとえば、次の例では、キーが電子メールアドレス(大文字と小文字を区別しない)であり、値が対応するMembershipUserオブジェクトのリストであり、最後のアクティビティの日付の降順でソートされた辞書が得られます。

var dictionary = Membership.GetAllUsers().Cast<MembershipUser>()
    .GroupBy(x => x.Email, StringComparer.OrdinalIgnoreCase)
    .ToDictionary(
                  x => x.Key, 
                  x =>x.OrderByDescending(u => u.LastActivityDate).ToList()
                 );
于 2012-07-06T17:23:36.747 に答える
2

次のコードでそれを実行できますが、最高のパフォーマンスが得られない可能性があります。

Membership.GetAllUsers().Cast<MembershipUser>().OrderBy(m => m.Email);

データベースクエリとしてではなく、メモリ内で並べ替えを行います。

于 2012-07-06T17:30:38.963 に答える
1
Membership.GetAllUsers().OrderBy(user => user.Email).ToList();
于 2012-07-06T17:21:11.067 に答える