我想知道在对象集合之间使用linq进行查询 和一系列价值观。在下面的示例代码中,我提出了相关问题。
class USER
{
public string Name { get; set; }
}
public class MyClass
{
public MyClass()
{
List<USER> listUser = new List<USER>();
listUser.Add(new USER { Name = "A" });
listUser.Add(new USER { Name = "B" });
listUser.Add(new USER { Name = "C" });
listUser.Add(new USER { Name = "D" });
string[] arrayNames = { "A", "B" };
}
}
使用Linq如何在USER
中获取所有listUser
名称等于arrayNames
值。?
预期结果将是
//listUser[0] --> User with Name == "A"
//listUser[1] --> User with Name == "B"
提前致谢。
答案 0 :(得分:2)
HashSet<string> names = new HashSet<string>(new string[]{ "A", "B" });
var selectedUsers = listUser.Where(user => names.Contains(user.Name));
如果你只有少数几个用户,那么hashset是可选的并且是过度的,但如果你有很多用户,它可以保证最佳的查找性能。
答案 1 :(得分:0)
listUser.Where(u => arrayNames.Contains(u.Name)).ToList();
答案 2 :(得分:0)
这应该是你想要的,在控制台应用程序中尝试。做了一个款待
var query = listUser.Where(i => arrayNames.Contains(i.Name));
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.ReadKey();
关键部分是arrayNames.Contains(i.Name)
,因为这与直觉相反,因为你指定了IEnumerable,然后是contains方法中的linq参数。
答案 3 :(得分:0)
listUser = (from u in listUser where arrayNames.Contains(u.Name) select u).ToList();