2

Groupグループのメンバーであるユーザーのリストを含むクラスがあります。
メソッドを使用FirstOrDefault()して、グループページを開いたユーザーがすでにそのグループに属しているかどうかを確認します。
それに基づいて、「グループに参加」または「グループから退出」ボタンを表示します。
これがこのようなシナリオの良い方法なのか、それとももっと良い方法があるのだろうか?

public class Group
{
    public virtual ICollection<UserInGroup> UsersInGroups { get; set; }
    ...
}

詳細なアクション メソッドでは、最初にグループをロードしてから、グループ内のユーザーを確認します。

public ActionResult Show(int groupId, string title)
{
    GroupViewModel groupiewModel = new GroupViewModel();

    var model = groupsRepository.GetGroupById(groupId);

    groupiewModel.Group = model;

    Guid userId = (Guid)Membership.GetUser().ProviderUserKey;
    var alreadyInGroup = model.UsersInGroups.FirstOrDefault(x => x.UserId == userId);

    if (alreadyInGroup != null)
        groupiewModel.IsInThisGroup = true;
    ...
}
4

3 に答える 3

7

Anyより良い選択だと思います

bool alreadyInGroup = model.UsersInGroups.Any(x => x.UserId == userId); 

if (alreadyInGroup)
{
     ....
于 2012-09-05T20:32:10.553 に答える
1

Using Any rather than FirstOrDefault means than you don't waste time on creating an instance.

于 2012-09-05T20:33:38.887 に答える
1

データベースサーバーでフィルター条件を実行したいということですね。これは、すべてのユーザーをダウンロードし、メモリ内でフィルタリングしてFirstOrDefaultいることを意味します。IEnumerable

したがって、これは正しい方法ではありません。

代わりに、LINQ クエリを作成して実行します。

その際は、 に切り替えてAnyください。

于 2012-09-05T20:35:17.527 に答える