2009-09-18 16 views

Odpowiedz

9

Odpowiedź Jona będzie działać, ale IMHO using join in LINQ to Entities is usually wrong, ponieważ duplikuje kod w swoim modelu. Mogę przepisać zapytanie Jona w znacznie prostszy sposób w L2E:

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 
      } 

to o 50% i 0% wpisywanie kodu duplikowane. Weź pod uwagę, że twoje relacje zostały już zdefiniowane w twoim DB i w twoim modelu. Czy na pewno chcesz je ponownie powielić w każdym pisanym przez siebie zapytaniu i przerwać zapytania, gdy refaktoryzujesz swój model?

+1

wow..dobry punkt – user161433

+3

@Craig - Szkoda, że ​​nie zrozumiałem, co tu widzę parę godzin temu. Brakowało mi "od zamówienia w customer.Order" - robiłem odpowiednik "z zamówienia w db.Orders", co jest zupełnie inne. Dzięki za to. – chris

+2

Generuje to połączenia krzyżowe w zapytaniu ... – dudeNumber4

7

Cóż, nie wiem, LINQ do podmiotów szczególnie, ale normalny składni LINQ byłoby:

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

(tj zaledwie kilka join klauzule).

Teraz podejrzewam, że już próbowałeś - jeśli tak, to co poszło nie tak?

+1

Chociaż to rzeczywiście działa, uważam, że lepiej jest używać relacji zamiast łączenia w konkretnym przypadku L2E. –

+0

Co w przypadku, gdy zaczynamy od kilku podanych jednostek informacyjnych ('od informacji w db.Info, gdzie informacje ... dołączenie do produktu ...'), czy jawnie zapisane połączenia nie byłyby bardziej wydajne w tym przypadku ? Czy nie ma to znaczenia w EF i "od klienta w db.Customers od zamówienia w customer.Orders od produktu w kolejności.Produkty od informacji w product.Info, gdzie informacje ...' być tak samo skuteczny? – j00hi

+0

@ j00hi: Zasadniczo musiałbyś spojrzeć na generowany SQL. –

Powiązane problemy