2011-03-10 3 views
3

이 특정 문제에 대한 해결책을 찾는 두통이 있습니다. 그래서 여기있다 : 내가 3 개 테이블이 있다고 가정하자 :부분 개체 그래프 만 반환하는 Entity Framework 쿼리

  • 고객
  • 주문
  • 제품

나는 고객의 목록에 대한 몇 가지 필터링 자신의 주문을 검색 할 일부 고객 및 주문 '필드에 표시하고 각 엔티티의 기본 정보 만 보여주는 그래프를 반환합니다.
예를 들어 고객은 19 개의 입력란을 가질 수 있지만 ID, 성, 성을 읽을 수 있으며 주문에서 NetPrice 및 관련 제품 ID를 읽고 싶습니다. 쿼리에서 생성되는 SQL은 매우 가볍고 특정 필드 만 선택합니다.
달성 할 수있는 것이 있습니까? 그렇다면 어떻게? 나는 이것을하는 방법에 대해 매우 당혹 스럽다.
대단히 감사합니다.

편집 : 좋아, 나는 그럭저럭 할 수 있었다. 그리고 소년 그것은 빨리 지금이다!! 여기 어떻게 내가 해냈어 :

var customers = (from customer in Context.Cutomers 
       select new 
       { 
        customer.ID, 
        customer.FirstName, 
        customer.LastName, 
        Orders = customer.Orders.Select(order => new 
        { 
         order.ID, 
         order.NetPrice, 
         Products = order.Products.Select(product => new 
         { 
          product.ID 
         } 
        } 
       }) 
       .AsEnumerable() 
       .Select(c => new Customer 
       { 
        c.ID, 
        //In my case, this is VERY important as it will 
        //try to convert from IEnumerable<T> to ICollection<T> 
        //which seems to need to be explicit. 
        Orders = c.Orders as ICollection<Order> 
       }) 
       .ToList(); 

편집 # 2 : 내가 잘못했다 ... 그것은 잘 컴파일 모든 내 제품은 내가 다시 난처한 상황에 빠진거야 ... 비어있는, 동작하는 것 같지만. ..

답변

0

투영을 사용할 수 있습니다 (익명 또는 준비된 유형). 나는 그것을 시도하지 않았지만 이것이 작동해야한다고 생각한다.

var query = from c in context.Customers 
      select new 
       { 
       c.Id, 
       c.FirstName, 
       c.LastName, 
       Orders = c.Orders.Select(o => 
        new OrderPartial 
        { 
         NetPrice = o.NetPrice, 
         ProductIds = o.Products.Select(p => p.Id) 
        }) 
       }; 
관련 문제