我有属性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
}
}
我的问题是 用于根据上述标准选择用户的声明是什么?
答案 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);