Giao diện IQueryable
cho phép bạn xác định các phần của truy vấn đối với nhà cung cấp LINQ từ xa (thường chống lại cơ sở dữ liệu, nhưng không nhất thiết) trong nhiều bước và thực thi chậm.
Ví dụ: lớp cơ sở dữ liệu của bạn có thể xác định một số hạn chế (ví dụ: dựa trên quyền, bảo mật - bất kỳ điều gì) bằng cách thêm mệnh đề .Where(x => x.......)
vào truy vấn của bạn. Nhưng điều này vẫn chưa được thực hiện - ví dụ: bạn đang không phải truy xuất 150'000 hàng phù hợp với tiêu chí đó. Thay vào đó, bạn chuyển giao giao diện IQueryable
sang cấp độ tiếp theo, lớp doanh nghiệp, nơi bạn có thể thêm yêu cầu bổ sung và điều khoản vào truy vấn của bạn - một lần nữa, không có gì được thực hiện ngay, bạn cũng không được tung ra 80'000 trong số 150'000 hàng bạn đã truy xuất - bạn chỉ xác định các tiêu chí truy vấn bổ sung.
Và lớp giao diện người dùng có thể thực hiện tương tự, ví dụ: dựa trên đầu vào của người dùng trong biểu mẫu hoặc nội dung nào đó.
Điều kỳ diệu là bạn đang đi qua giao diện IQueryable
qua tất cả các lớp, thêm critieria bổ sung vào nó - nhưng nó không được thực thi/đánh giá cho đến khi bạn thực sự ép buộc nó. Điều này cũng có nghĩa là bạn không cần phải lựa chọn và truy xuất tấn dữ liệu mà bạn sẽ loại bỏ sau đó. Bạn có thể không thực sự làm điều đó với một danh sách tĩnh cổ điển - bạn phải chọn dữ liệu, có thể loại bỏ rất nhiều nó một lần nữa sau này trong quá trình - bạn có một danh sách tĩnh, sau khi tất cả.
Nguồn
2010-04-20 20:38:26
'IQueryable' về cơ bản là khác nhau từ 'List' - cả hai đều có sử dụng của họ. –