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

使用 Any 而不是 FirstOrDefault 意味着您不会在创建实例上浪费时间。

于 2012-09-05T20:33:38.887 回答
1

我了解到您希望在数据库服务器上执行过滤条件。您正在调用FirstOrDefaultan IEnumerable,这意味着您正在下载所有用户并在内存中进行过滤。

所以这不是正确的方法。

相反,构建一个 LINQ 查询并执行它。

在这种情况下,您可以切换到Any.

于 2012-09-05T20:35:17.527 回答