lambda表达式中更深层次的LINQ查询

时间:2012-01-13 16:46:53

标签: linq lambda

我希望使用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的属性。

3 个答案:

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