2012-02-02 4 views
0

필드 중 하나가 관련된 자식의 엔티티 콜렉션 인 상위 엔티티가되는 Linq 질의를 작성하려고합니다. 예를 들어 모든 고객 엔티티 컬렉션과 모든 주문 엔티티 컬렉션이 있습니다. 주문 엔티티에는 관련 상위 고객 엔티티에 대한 링크를 포함하는 customerPK라는 필드가 있습니다. 두 개의 컬렉션을 결합하고 고객 엔터티의 모든 필드와 특정 고객 엔터티에 대한 모든 관련 주문 엔터티의 컬렉션 개체 인 추가 필드를 결합하는 Linq 쿼리를 만들고 싶습니다.부모 엔티티의 한 필드가 하위 엔티티의 집합이되는 Linq 질의

답변

1

이 트릭을 수행해야합니다.

편집 :이 예를 기반으로 왼쪽 외부 조인을 수행하도록 코드가 업데이트되었습니다. http://smehrozalam.wordpress.com/2009/06/10/c-left-outer-joins-with-linq/. 여기에는 주문이없는 고객이 포함됩니다.

var query = from c in customers 
      join o in orders on c.ID equals o.CustomerPK into joined 
      from j in joined.DefaultIfEmpty() 
      group j by c into g 
      select new { Customer = g.Key, Orders = g.Where(x => x != null) }; 

주, 주문 그룹의 선택에 Where의 사용은 그래서 널 주문이 대신하지 않는 고객을 위해 하나의 널 주문을 포함하는 그룹과 결말의이 시점에서 필터링되어있다 명령을 받았다.

그런 다음 몇 가지 사용 예;

foreach (var result in query) 
{ 
    Console.WriteLine("{0} (ID={1})", result.Customer.Name, result.Customer.ID); 
    foreach (var order in result.Orders) 
    { 
     Console.WriteLine(order.Description); 
    } 
} 

두 개의 필드, 고객 그리고 관련 주문의 그룹과 대상이 예의 결과는,하지만 당신은 지정된 쿼리의 고객 개체의 개별 필드를 선택할 수없는 이유를 이유가 없다 귀하의 게시물에

+0

주문이없는 고객도이 쿼리를 수정할 수 있습니까? 그 고객은 결과에 포함되지 않습니다. – user31673

+0

@ user54064 : 이제 지정한대로 동작하도록 답변을 업데이트했습니다. 느린 응답에 대해 유감스럽게 생각하지만 링크 된 예제를 우연히 발견 할 때까지이 작업을 수행하는 방법을 알지 못했습니다. –

관련 문제