2012-01-20 24 views
11

Tôi đã đọc một số bài báo cho biết IEnumerable được sử dụng để bắt chước các thủ tục được lưu trữ hoặc hạn chế cơ sở dữ liệu của bạn. Mất khả năng tải lười biếng trên nhà cung cấp bên ngoài.IQueryable so với IEnumerable trong mẫu lưu trữ, tải chậm

Nơi IQuery có thể cung cấp cho nhà phát triển sự linh hoạt hơn. Lazy tải là có.

Xét về hiệu suất, cả hai đều tiêu thụ một lượng đáng kể hiệu suất .. do đó quảng cáo nào phù hợp hơn?

+1

Như mọi khi ... nó phụ thuộc vào chính xác những gì bạn cần ... –

Trả lời

21

Từ góc nhìn của một Pattern Repository, bạn có thể nghĩ về nó theo cách này:

  1. Sử dụng một tải háo hức IEnumerable khi bạn muốn vượt qua toàn bộ danh sách cho khách hàng trong một đi. Họ vẫn có thể thêm các mệnh đề LINQ, nhưng máy khách không được hưởng lợi từ việc thực thi hoãn lại.

  2. Sử dụng tải chậm IQueryable khi bạn muốn mở rộng khả năng truy vấn bị trì hoãn cho ứng dụng khách, bằng cách cho phép khách hàng thêm mệnh đề LINQ của riêng họ. Điều này sẽ thực thi toàn bộ truy vấn cho đến khi đầu ra được yêu cầu.

Xem Cũng
Deferred execution and eager evaluation

0

Sự khác biệt chính giữa “IEnumerable” và “IQueryable” là về nơi logic lọc được thực thi. Một thực hiện trên phía máy khách (trong bộ nhớ) và một thực thi khác trên cơ sở dữ liệu.

Vì vậy, khi truy vấn dữ liệu từ bộ sưu tập trong bộ nhớ như Danh sách, Mảng vv, bạn nên sử dụng IEnumerable.

Mặt khác khi truy vấn dữ liệu từ bộ nhớ ngoài (như cơ sở dữ liệu từ xa, dịch vụ), bạn nên sử dụng IQueryable.

0

IEnumerable vs IQueryable

IQueryable là tốt nhất cho dữ liệu phía máy chủ, trong khi IEnumerable là tốt nhất cho mảng/danh sách sử dụng về phía khách hàng.

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