1

サンプルアプリをコーディングして、ASP.NetMVC3EF4を学習しています。標準のメンバーシッププロバイダーを使用しています。メンバーシッププロバイダーにrequiresUniqueEmail="true"があるので、MembershipUserごとに1通のメールしかありません。

メールアドレスで特定のユーザーを見つけたい。役立つ機能があります:

MembershipUserCollection users = Membership.FindUsersByEmail(model.Email);

一意のメールがあるので、MembershipUserCollectionからMembershipUserを取得するにはどうすればよいですか?foreachループを実行できることはわかっています。

foreach (MembershipUser user in users)
{
username = user.UserName;
}

しかし、最初の行にアクセスするより簡単な方法はありますか?

これは機能しません:MembershipUser user = users [0];

でもそれは私が探しているものの一種です。

ありがとう!!

更新:これは機能しますが、私はまだ上記の答えに興味があります:

string username1 = Membership.GetUserNameByEmail(model.Email);
MembershipUser user = Membership.GetUser(username1);
4

2 に答える 2

3

ユーザーごとに固有のメールがあるので、なぜMembershipUserCollectionClassを使用しているのですか

むしろあなたはそれを使って直接それを手に入れることができます

    string userName = Membership.GetUserNameByEmail(model.Email);

    MembershipUser oMu = Membership.GetUser(userName); 

oMuオブジェクトは、渡した電子メールアドレスを持つユーザーのすべてのプロパティを提供しますGetUserNameByEmail(model.Email)

問題の更新に基づいて編集

単一のレコードしかないコレクションをロードすることは無関係だと思います。メモリ消費量は、文字列のユーザー名(私の例で使用されています)と比較して多くなります。さらに、単一のレコードを見つけるのに問題があります(ループを使用している場合)。 、詳細の取得に不要な遅延が発生します)。さらに、コードの行が削減されます(コードのコンパイルがより簡単かつ高速になります)。

于 2012-05-19T04:56:54.023 に答える
1

First()次のようにLinq拡張メソッドを使用してみてください。

using System.Linq;
...
var user = Membership.FindUsersByEmail(model.Email).Cast<MembershipUser>.First();

MembershipUser(カスタムサブクラスを使用する場合は、カスタムサブクラスにキャストすることもできます)。

于 2012-05-19T04:54:27.423 に答える