2009-09-18 29 views

Trả lời

9

Câu trả lời của Jon sẽ hoạt động, nhưng IMHO using join in LINQ to Entities is usually wrong, vì nó trùng lặp mã trong mô hình của bạn. Tôi có thể viết lại truy vấn của Jon theo cách đơn giản hơn nhiều trong 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 
      } 

Khoảng 50% số lần nhập và 0% mã trùng lặp. Hãy xem xét rằng các mối quan hệ của bạn đã được xác định trong DB của bạn và trong mô hình của bạn. Bạn có thực sự muốn sao chép chúng một lần nữa trong mỗi truy vấn bạn viết, và phá vỡ các truy vấn của bạn khi bạn cấu trúc lại mô hình của bạn?

+1

wow..điểm tốt – user161433

+3

@Craig - Tôi ước gì tôi đã hiểu những gì tôi đã xem ở đây một vài giờ trước. Những gì tôi đã bỏ lỡ là "từ thứ tự trong customer.Order" - Tôi đã làm tương đương với "từ thứ tự trong db.Orders", đó là hoàn toàn khác nhau. Cảm ơn cho điều này, mặc dù. – chris

+2

Điều này tạo ra tham gia chéo trong truy vấn ... – dudeNumber4

7

Vâng, tôi không biết LINQ to Entities đặc biệt, nhưng cú pháp LINQ bình thường sẽ là:

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

(nghĩa là chỉ vài join khoản).

Bây giờ tôi nghi ngờ rằng bạn đã thử điều đó - nếu có, điều gì đã xảy ra?

+1

Trong khi điều này thực sự làm việc, tôi tin rằng đó là hình thức tốt hơn để sử dụng các mối quan hệ thay vì tham gia trong trường hợp cụ thể của L2E. –

+0

Điều gì về trường hợp khi chúng ta bắt đầu với một vài thông tin-thực thể ('từ thông tin trong db.Info, nơi thông tin ... tham gia sản phẩm ...'), sẽ không được viết một cách rõ ràng được hiệu quả hơn trong trường hợp đó ? Hoặc nó không quan trọng trong EF và sẽ 'từ khách hàng trong db.Customers từ đơn đặt hàng trong customer.Orders từ sản phẩm theo thứ tự. Sản phẩm từ thông tin trong product.Info nơi thông tin ...' được chỉ là hiệu quả? – j00hi

+0

@ j00hi: về cơ bản bạn sẽ phải xem xét SQL được tạo ra. –

Các vấn đề liên quan