选择“特定条件下的用户”(如果列表中存在)



>我有属性 用户类型 列表;我正在使用 List 存在 方法来检查此列表是否包含具有相同属性名称的对象,其中一个作为参数传递。

public User SomeAction(User user)
{
   List<User> users = GetUsers();
   if(users.Exists(x => x.Name == user.Name))
   {
      // select user which exist under above criteria
   }
}

我的问题是在上述条件下使用什么语句来选择用户?

使用 any 语句。如果语句与任何对象匹配,这将返回 true。

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.any.aspx

if(users.Any(x=>x.Name == user.Name)){
  //....
}

编辑:错过了要求用户在检查是否存在后选择用户的部分。如果要为表达式选择第一个匹配项。

var match = users.FirstOrDefault(x=>x.Name.Equals(user.Name));
if(match != null){
   //...TODO
}

可能是这样的:

users.Where((x=>x.Name == user.Name).SingleOrDefault();

并且通常可以重构代码以:

List<User> users = GetUsers();
var foundUser =  users.Where((x=>x.Name == user.Name).SingleOrDefault();
if(foundUser != null) {
  //DO SOMETHING AS THERE IS A USER
}

所以避免双重查询。

注意:这里我假设User是引用类型,因此它的默认值为 null

使用 FirstOrDefault - 如果不符合您的条件的用户不存在,它将返回null,否则返回匹配的用户:

users.FirstOrDefault(u => u.Name == user.Name)

您也可以使用 SingleOrDefault 如果应该只有一个符合您条件的用户。

使用单个,仅获取一个用户,并在有多个同名用户时获取异常

var user = users.Single(x=>x.Name==user.Name);
users.Single(x=>x.Name == user.Name)

其他一些事情尝试使用String.Equals

users.Single(x=>String.Equals(x.Name, user.Name))
User user = users.FirstOrDefault(x=>x.Name == user.Name)
if(user != null)...

相关内容

最新更新