2016-06-14 17 views
8

Tôi tự hỏi, nếu tôi sử dụng nhiều phương pháp Where(...) cái khác, EntityFramework đủ thông minh để kết hợp nó trong một truy vấn kết quả. Hãy nói rằng tôi có:EntityFramework Nhiều nơi

context.Items 
    .Where(item => item.Number > 0) 
    .Where(item => item.Number < 5) 
    .ToList(); 

kết quả truy vấn SQL sẽ được giống như nếu tôi viết:

context.Items 
    .Where(item => item.Number > 0 && item.Number < 5) 
    .ToList(); 

Có bất kỳ đằng sau hậu trường tối ưu cho nhiều trường hợp quy định tại khoản?

+0

Cả hai đều phải dịch sang SQL tương tự cho bất kỳ nhà cung cấp lớn. Bạn luôn có thể thử cả hai và xem SQL nào tạo ra. –

+1

Có nhiều nơi giống như tham gia các điều kiện với && (mà bạn có thể tự xác minh trong khoảng một phút). – Evk

+0

@Evk Tôi không thể xác minh bất kỳ JIT hoặc tối ưu hóa đường cú pháp nhanh chóng mà không cần đào sâu vào tài liệu và IL. Xin vui lòng xem câu hỏi cuối cùng của tôi. Cảm ơn. – Andrei

Trả lời

5

Có, có. Nó không phải là Entity Framework thực hiện điều này. Nó thực sự là công việc của nhà cung cấp SQL nhà máy để soạn truy vấn cho cơ sở dữ liệu. Tùy thuộc vào cơ sở dữ liệu bạn sử dụng, mã này sẽ từ các nguồn khác nhau.

Đối với MSSQL, mã là của Microsoft và nằm trong thư viện System.Data.SqlClient. Nếu bạn nhìn vào phần tử kết nối của bạn trong web.config, bạn sẽ thấy thuộc tính "providerName".

Bên trong thư viện này hoặc thư viện tương tự, thường là mẫu khách truy cập đệ quy được sử dụng để điều hướng qua biểu đồ đối tượng Tree Express được xác định để tạo truy vấn hiệu quả nhất có thể.

Sử dụng nhiều mệnh đề rất dễ phát hiện và tối ưu hóa, nơi mà các loại thư viện này gặp sự cố có xu hướng với các phép chiếu lồng nhau sâu.

Bạn có thể xem SQL được tạo ra bởi truy vấn của bạn nếu bạn sử dụng

context.Items 
.Where(item => item.Number > 0) 
.Where(item => item.Number < 5) 
.ToString(); 
+0

Cảm ơn câu trả lời của bạn! – Andrei

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