我有一个班级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;
...
}
答案 0 :(得分:7)
我认为Any
是更好的选择
bool alreadyInGroup = model.UsersInGroups.Any(x => x.UserId == userId);
if (alreadyInGroup)
{
....
答案 1 :(得分:1)
使用Any而非FirstOrDefault意味着您不会在创建实例上浪费时间。
答案 2 :(得分:1)
我知道您希望在数据库服务器上执行过滤条件。您正在FirstOrDefault
上调用IEnumerable
,这意味着您正在下载所有用户并在内存中进行过滤。
所以这不是正确的方法。
相反,构建一个LINQ查询并执行它。
在那种情况下,您可以切换到Any
。