2012-01-13 5 views
2

LINQ 쿼리를 사용하여 전화 번호가 "666666"인 직원을 얻고 싶습니다.람다 식의 더 깊은 수준의 LINQ 쿼리

다음은 클래스 정의는 다음과 같습니다

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

내 문제는 내가 몰라 :

public class Employees 
{ 
    public List<Phones> Phones{get;set} 
} 
public class Phones 
{ 
    public string Id{get;set;} 
    public string Number{get;set;} 
} 

이것은 (내 의심의 여지가 ???로 표시) 내 쿼리입니다 이 LINQ 식에서 더 깊은 수준으로 이동하는 방법, 왜냐하면 e=>e...Phones에 대한 액세스 권한이 IEnumerable이지만 Phone ' 속성.

+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 
    }); 
+0

고마워요. 10 분 후 최선의 답변 :-)) – Jose3d

3

where 메서드에 전달 된 매개 변수는 각 요소에 대해 true 또는 false를 반환하는 함수 일 뿐이며 모든 메서드 (LINQ (포함 된 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 
       }); 
+0

고마워요. 작동했습니다. – Jose3d

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