我希望搜索一个名为tempName
的字符串是否已包含在用户对象列表中。这些userClass
类型的用户对象包含字符串数据方法Name
,其值我想与tempName
进行核对。
在LINQ中如何完成?
感谢
使用传统的for循环,我可以这样做:
bool already = false;
for (int i = 0; i < userList.Count; i++)
{
if (Name == userList[i].name)
already = true;
}
答案 0 :(得分:3)
您可以使用Enumerable.Any
,它使用expression lambda(带user =>
的位)来指定用于测试每个用户的函数,并返回一个布尔值:
string name = "the name you're searching for";
bool already = userList.Any(user => user.Name.Contains(name));
这具有(性能)优势,它不会枚举所有元素;一旦找到满足您指定条件的第一个元素,它就会失败。
答案 1 :(得分:2)
假设users
包含完整的用户列表,而tempName
包含您要过滤的名称,则可以执行此操作:
var newUsers = users.Where(user => user.Name.Contains(tempName)).ToList()
答案 2 :(得分:1)
在看到使用传统for循环编辑后,您可以使用LINQ的任何扩展方法。
bool already = userList.Where(x => Name == x.Name).Any();
或
bool already = userList.Any(x => Name == x.Name);