2013-07-25 72 views
6

Có sự khác biệt nào trong mã này không?Thực hiện lệnh truy vấn chuỗi LINQ

var query = DbContext.Customers 
       .Where(<condition>) 
       .Include("Address"); 

var query = DbContext.Customers 
       .Include("Address") 
       .Where(<condition>); 

Nó deffered truy vấn, và tôi không biết, nó là tương đương? Hoặc trong trường hợp thứ hai where được thực hiện sau Include?

Cảm ơn.

+4

Đơn đặt hàng không quan trọng. – wudzik

+1

Chúng tương đương nhau. Truy vấn không được thực thi cho đến khi bạn lặp lại kết quả, hoặc gọi ToList(). – Oscar

+1

Trong trường hợp này, có, nhưng với LINQ đối với thực thể và bao gồm [nó không phải luôn luôn cắt rõ ràng này] (http://blogs.msdn.com/b/alexj/archive/2009/06/02/tip-22-how -to-make-include-really-include.aspx) –

Trả lời

2

Đối với đơn đặt hàng EF trước khi lựa chọn không thành vấn đề. Truy vấn LINQ được chuyển đổi thành truy vấn SQL và chạy và trình tối ưu hóa truy vấn SQL không quan tâm đến thứ tự của truy vấn ban đầu.

Vì Patryk chỉ ra thứ tự có thể quan trọng cụ thể với Include khi các câu lệnh sau sửa đổi cấu trúc truy vấn, nhưng mệnh đề where không làm điều đó.

Trong các truy vấn LINQ khác, LINQ-to-Objects, thứ tự có thể quan trọng khi truy vấn không được tối ưu hóa lại cách SQL và được xử lý đơn giản từ trên xuống dưới, và một số phương thức LINQ yêu cầu các phương pháp trước để chạy hoàn thành và xử lý kết quả trước khi tiến hành ngay cả phần tử đầu tiên (ví dụ: OrderBy).

+0

Trong trường hợp này, có. Nhưng điều đó không phải lúc nào cũng đúng. Nhiều truy vấn phụ thuộc vào thứ tự, đặc biệt sau khi chọn. –

+0

@MystereMan, điểm tốt về lựa chọn, tôi cập nhật câu trả lời của tôi để làm rõ điểm đó. Điểm mấu chốt là không phải tất cả LINQ đều giống nhau - LINQ to EF khác với LINQ to Objects và bất kỳ LINQ nào khác. LINQ to EF chủ yếu được chuyển đổi sang SQL và chủ yếu là thứ tự không quan trọng. –

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