IEnumerable<T>
Có nhiều cách khác nhau mà một bộ điều thể được lưu trữ trong một danh sách, trong một mảng, trong một cơ sở dữ liệu vv Một điều mà các cơ chế lưu trữ có điểm chung là bộ những thứ đang được giữ có thể là Được liệt kê, mỗi cái có thể được truy cập cái này sau cái khác bằng cách sử dụng cấu trúc ngôn ngữ chẳng hạn như foreach
chẳng hạn.
Giao diện IEnumerable<T>
thể hiện giao diện chung mà tất cả các chủ sở hữu của bộ điều phải bật điều tra.Do đó IEnumberable<Person
đại diện cho một giao diện cho phép đếm một Tập hợp các đối tượng Person
mà không cần cụ thể về cách thức thực tế mà các đối tượng đó được lưu trữ.
IQueryable<T>
Đây là một phần mở rộng để IEnumerable<T>
nhưng đại diện cho một cái gì đó cụ thể để LINQ. Trong LINQ, bạn có thể chỉ định một truy vấn có thể lọc và chuyển đổi một tập hợp (hoặc bộ) của các mục. Đối với giao diện thuần túy là IEnumerable<T>
, nó sẽ được gọi là LINQ to Objects, trong đó mỗi giai đoạn trong truy vấn cuối cùng là một lời gọi đơn giản đến một phương thức mở rộng.
Tuy nhiên đối với đối tượng triển khai IQueryable<T>
mọi thứ có thể phức tạp hơn. Đối tượng thực hiện IQueryable<T>
có thể được liên kết với một Nhà cung cấp LINQ khác nhau có thể triển khai thực hiện truy vấn LINQ theo cách khác. Ví dụ: IQueryable<Person>
có thể được triển khai bằng loại được liên kết với nhà cung cấp LINQ-To-SQL. Trong trường hợp này, truy vấn LINQ được chuyển thành truy vấn T-SQL được thực thi dựa vào cơ sở dữ liệu để nhận một tập hợp các mục (kết quả có thể không nhất thiết là một tập hợp các đối tượng Person
).
IEnumerable là loại .Net, không phải là cụm từ OOPs – Gishu
BTW, đó là OOP (Lập trình hướng đối tượng) không phải OOPS. Tôi đã chỉnh sửa để sửa chữa nó mặc dù. – Aamir
@Aamir bạn nói đúng. tôi cầu xin sự phổ biến ngữ nghĩa :) - tuy nhiên nếu bạn hỏi Alan Kay và một số người nổi tiếng khác, OOPS là thích hợp cho những gì nó đã đến được. – Gishu