Linq自定义查询与对象属性

时间:2011-11-28 11:57:50

标签: c# linq

我想知道在对象集合之间使用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"

提前致谢。

4 个答案:

答案 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();