2012-02-07 43 views
7

Cách tốt nhất để viết hiệu suất truy vấn một cách khôn ngoan là gì. ví dụ. tôi có thể viết truy vấn để có được tất cả employes vào tên cuối cùng cụ thể như sauCách tốt nhất để viết truy vấn trong Entity Framework

ObjectQuery<Employee> queryEmp = 
    context.CreateQuery<Employee>(
    "Select value e from Employees AS e Where e.LastName = @lastName", 
    new ObjectParameter("lastName", typeof(String)) { Value = "Farooqi" }); 
ObjectResult<Employee> results = query.Execute(MergeOption.AppendOnly); 

HOẶC

var v = from e in context.Employees where e.LastName == "Farooqi" select e; 

HOẶC

context.Employees.Where(e => e.LastName == "Farooqi"); 

HOẶC

context.Employees.Where("LastName = @lastName", new ObjectParameter("lastName", typeof(String)) { Value = "Farooqi" }); 

Câu hỏi của tôi là này phương pháp truy vấn nào là tốt nhất. Những gì tôi nhầm lẫn là tôi nghĩ (nhưng không chắc chắn) sử dụng ba phương thức khác với phương pháp đầu tiên sẽ lấy tất cả hồ sơ của nhân viên từ cơ sở dữ liệu, sau đó liệt kê tất cả các bản ghi sẽ được kiểm tra lại. tôi nghĩ rằng ba cách cuối cùng sẽ mất nhiều thời gian hơn so với lần đầu tiên vì vậy tôi chỉ sử dụng đầu tiên. Nhưng cái nào là tốt nhất trong thực tế tôi không biết. Tất cả phương pháp chỉ tìm nạp cơ sở dữ liệu biểu mẫu hồ sơ đáp ứng điều kiện đã được hoặc lấy tất cả các bản ghi từ db và sau đó được liệt kê để trả về các bản ghi đã lọc ở cuối ứng dụng?

Trả lời

9

Có rất ít sự khác biệt; thứ 2/thứ 3 có lợi thế là thực thi đúng kiểu lúc biên dịch, vì biểu thức-cây sẽ không biên dịch nếu LastName không tồn tại hoặc là (nói) là int - tránh lỗi chính tả và vấn đề "chuỗi ma thuật".

Giả sử bạn về việc đưa mọi thứ trở lại; Không. Biên dịch 2/3 đến cây biểu hiện, có thể được xây dựng và sử dụng để tạo đúng SQL (thực hiện bộ lọc tại máy chủ). Rất thông minh, nhưng thường bị hiểu lầm. Điểm mấu chốt là đây là Queryable.Where (chụp Expression<Func<T, bool>>), không phải Enumerable.Where (chụp Func<T, bool>). Hãy thực hiện một dấu vết.

Tương tự như vậy, có rất ít sự khác biệt giữa ngày 1/4 - cả hai sẽ lọc tại máy chủ.

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