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

时间:2013-11-08 09:25:36

标签: c# .net linq

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

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

我的问题是 用于根据上述标准选择用户的声明是什么?

6 个答案:

答案 0 :(得分:2)

使用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
}

答案 1 :(得分:1)

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

其他一些尝试使用String.Equals代替

users.Single(x=>String.Equals(x.Name, user.Name))

答案 2 :(得分:1)

可能是这样的:

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:1)

User user = users.FirstOrDefault(x=>x.Name == user.Name)
if(user != null)...

答案 5 :(得分:1)

如果有多个同名用户

,请使用single,仅获取一个用户并获取异常
var user = users.Single(x=>x.Name==user.Name);