2008-10-29 42 views
8

Tôi tập thể dục nhiều hơn và nhiều hơn với Lambda nhưng tôi không tìm ra lý do tại sao ví dụ sử dụng .AsQueryable(); sử dụng IQueryable và đôi khi nó bỏ qua .AsQueryable(); và sử dụng IEnumerable.IQueryable <T> vs IEnumerable <T> với Lambda, để chọn?

Tôi đã đọc số MSDN nhưng tôi không thấy cách "thực thi cây biểu thức" là lợi thế so với không.

Bất cứ ai cũng có thể giải thích cho tôi?

Trả lời

6

IQueryable thực hiện IEnumerable, do đó, ngay lập tức dơi, với IQueryable, bạn có thể làm tất cả mọi thứ mà bạn có thể làm với IEnumerable. IQueryables đối phó với việc chuyển đổi một số biểu thức lambda thành truy vấn trên nguồn dữ liệu cơ bản - đây có thể là một cơ sở dữ liệu SQL hoặc một bộ đối tượng.

Về cơ bản, bạn thường không phải quan tâm theo cách này hay cách khác nếu đó là IQueryable hoặc IEnumerable.

6

Là người dùng, bạn thường không cần phải quan tâm, nó thực sự là về người triển khai nguồn dữ liệu. Nếu các nhà cung cấp dữ liệu chỉ thực hiện IEnumerable, về cơ bản bạn đang làm LINQ để thực hiện các đối tượng, nghĩa là nó hoạt động trong bộ nhớ trên các bộ sưu tập. IQueryable cung cấp nguồn dữ liệu khả năng dịch cây biểu thức thành một biểu diễn thay thế để thực thi khi biểu thức được thực thi (thường là do liệt kê), đó là những gì mà Linq2Sql, Linq2Xml và Linq2Entities thực hiện.

Lần duy nhất tôi có thể thấy người dùng cuối quan tâm, là nếu họ muốn kiểm tra cây biểu thức sẽ được thực thi, vì IQueryable cho thấy Biểu thức. Sử dụng khác có thể là kiểm tra các nhà cung cấp. Nhưng cả hai kịch bản đó thực sự nên được dành riêng cho những người triển khai các nhà cung cấp truy vấn khác và muốn chuyển đổi biểu thức. Điểm quan trọng của LINQ là bạn không cần phải quan tâm đến việc triển khai thực hiện biểu thức được sử dụng.

1

Tôi đồng ý với Arne Claassen, có những trường hợp khi bạn cần suy nghĩ về implmentatoin cơ bản được cung cấp bởi các nguồn dữ liệu. Ví dụ, kiểm tra này blog post trong đó cho thấy cách SQL được tạo ra bởi IEnumerable và IQueryable là khác nhau trong các tình huống nhất định.

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