Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lambda表达式中的深层LINQ查询_Linq_Lambda - Fatal编程技术网

lambda表达式中的深层LINQ查询

lambda表达式中的深层LINQ查询,linq,lambda,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()

我希望使用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..
中,我可以作为
IEnumerable
访问
Phone
,但我想导航到
Phone
的属性。

传递到where方法的参数只是一个函数,它为每个给定元素、所有方法(包括LINQ方法)返回true或false(根据访问ref/out参数等)仍然可以在其中调用:

var employees= data.GetEmployees()
               .Where(e => e.Phones.Any(p => p.Number == "666666"))
               .Select(e => new Employee() 
               {     
                    Id=e.Id,
                    Name=e.Name 
               });

最简单的方法是使用嵌套的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
  });

你是在说魔鬼吗?;)谢谢。10分钟后的最佳答案:-)
var employees= data.GetEmployees()
               .Where(e=> e.Phones.Contains(x=>x.Number == "666666"))
               .Select(e => new Employee() 
               {     
                    Id=e.Id,
                    Name=e.Name 
               });