2009-09-18 3 views

답변

9

모델의 코드가 중복되기 때문에 Jon의 대답은 작동하지만 IMHO using join in LINQ to Entities is usually wrong입니다. 내가 L2E에 훨씬 간단한 방법으로 존의 쿼리를 다시 작성할 수 있습니다 :

타이핑의 약 50 %와 중복 된 코드의 0 %의
var query = from customer in db.Customers 
      from order in customer.Orders 
      from product in order.Products 
      from info in product.Info 
      select new 
      { 
       customer.Name, 
       info.BriefDescription 
      } 

. 관계가 DB와 모델에 이미 정의되어 있다고 생각하십시오. 작성한 모든 쿼리에서 다시 복제하고 싶고 모델을 리팩터링 할 때 쿼리를 중단해야합니까?

+1

와우. 좋은 지적 – user161433

+3

@Craig - 나는 몇 시간 전에 내가 여기서 본 것을 이해하고 싶다. 내가 놓친 것은 "고객의 주문에서. 오더"였습니다. "db의 주문에서. 주문"과 완전히 다른 것을하고있었습니다. 그래도 고마워. – chris

+2

이것은 쿼리에 교차 조인을 생성합니다 ... – dudeNumber4

7

글쎄, 나는 특히 엔티티에 LINQ를 모르겠지만, 일반 LINQ 구문은 다음과 같습니다

var query = from customer in db.Customers 
      join order in db.Orders on customer.ID equals order.ID 
      join product in db.Products on order.ProductID equals product.ID 
      join info in db.Info on product.InfoID equals info.ID 
      select new { customer.Name, info.BriefDescription }; 

(즉, 단지 몇 join 조항).

이제 이미 시도한 것으로 의심됩니다. 그렇다면 무엇이 잘못 되었습니까?

+1

실제로 작동하지만, L2E의 특정 경우에 조인 대신 관계를 사용하는 것이 더 좋은 방법이라고 생각합니다. –

+0

두 개의 주어진 Info-entities로 시작하는 경우 ('info from db.Info where info ... join product ...'), 명시 적으로 작성된 조인이 더 효율적이지 않은 경우는 어떨까요? ? 또는 EF에서 중요하지 않으며'고객의 db.Customers의 고객 주문. 주문 상품의 순서. 제품 정보의 제품. 정보의 info ... '와 마찬가지로 효율적입니까? – j00hi

+0

@ j00hi : 기본적으로 생성되는 SQL을 살펴 봐야합니다. –

관련 문제