Membership.GetAllUsers()を使用してユーザーリストを取得しています。一部のアカウントに重複するメールのフラグを立てる必要があるため、リストをメールアドレスで並べ替えて返したいのですが。
Membership.GetAllUsers()は、デフォルトでユーザー名で並べ替えているようです。この動作を変更する方法はありますか?
Membership.GetAllUsers()を使用してユーザーリストを取得しています。一部のアカウントに重複するメールのフラグを立てる必要があるため、リストをメールアドレスで並べ替えて返したいのですが。
Membership.GetAllUsers()は、デフォルトでユーザー名で並べ替えているようです。この動作を変更する方法はありますか?
あなたが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()
);
次のコードでそれを実行できますが、最高のパフォーマンスが得られない可能性があります。
Membership.GetAllUsers().Cast<MembershipUser>().OrderBy(m => m.Email);
データベースクエリとしてではなく、メモリ内で並べ替えを行います。
Membership.GetAllUsers().OrderBy(user => user.Email).ToList();