我希望使用LINQ查询来获得电话号码==“666666”的员工。
这些是类定义:
public class Employees
{
public List<Phones> Phones{get;set}
}
public class Phones
{
public string Id{get;set;}
public string Number{get;set;}
}
这是我的疑问(我怀疑是???):
var employees= data.GetEmployees()
.Where(e=> e.Phones ???i need to navigate a level below phones ???)
.Select(e => new Employee()
{
Id=e.Id,
Name=e.Name
});
我的问题是我不知道如何在这个LINQ表达式中更深层次,因为在e=>e...
我可以访问Phones
作为IEnumerable
,但我想导航到Phone
的属性。
答案 0 :(得分:3)
传递给where方法的参数只是一个为每个给定元素返回true或false的函数,所有方法(包括LINQ(可以访问ref / out params等))仍然可以在其中调用:
var employees= data.GetEmployees()
.Where(e => e.Phones.Any(p => p.Number == "666666"))
.Select(e => new Employee()
{
Id=e.Id,
Name=e.Name
});
答案 1 :(得分:3)
最简单的方法是使用嵌套的LINQ查询。在这种情况下,您应该查看Any
方法。
var employees= data
.GetEmployees()
.Where(e => e.Phones.Any(p => p.Number == "666666"))
.Select(e => new Employee() {
Id = e.Id,
Name = e.Name
});
答案 2 :(得分:1)
var employees= data.GetEmployees()
.Where(e=> e.Phones.Contains(x=>x.Number == "666666"))
.Select(e => new Employee()
{
Id=e.Id,
Name=e.Name
});