Là gì

Sự Khác Biệt Giữa Iqueryable Là Gì ? Sự Khác Biệt Giữa Iqueryable Và Ienumerable Là Gì

Chào mọi người & SupportGroup!Mình hiện đang nghiên cứu LINQ, nhưng có vấn đề này mình thực sự còn băn khoăn, chưa đi đến cội rễ vấn đề nên còn cảm thấy khó chịu vì 2 cái thằng này: IQueryable và IEnumwerable. Các bạn giúp mình hiểu rõ 2 Interface này được không ? Khi nào dùng cái nào ? Dùng như thế nào để tối ưu? Thế này nhé, giả sử mình có một DataContext như thế này:

Đang xem: Iqueryable là gì

Sau đó mình thử truy vấn, theo 2 cách sau đều được: (được ở đây là mình đã cho ra hẳn một DataGrid, ở đây xin thôi khỏi trình bày

*

)Cách 1:
Theo mình hiểu, với LINQ to Object, hay khi dữ liệu ở ngay trên bộ nhớ (Local memory) thì ta nên dùng IEnumwerable. Còn khi truy vấn SQL, tức là LINQ to SQL, ta nênn dùng IQueryable. Khái niệm delay loading thì mình đã hiểu, nhưng còn “execute chậm” là như thế nào nhỉ ? có liên quan gì ở đây không ?Thực sự 2 thằng Interface trên mình hiện đang dùng lẫn cho nhau, vui thì cái này, chả vui thì cái kia. Đọc sách LINQ to PRO thì có đoạn giải thích như sau, nhưng cảm thấy nó nói cũng không đi đến đích lắm:
While LINQ queries performed on arrays and collections return sequences of type IEnumerable, LINQ to SQL query that returns a sequence, returns a sequence of type IQueryable. Listing 14-6contains an example of a query returning a sequence of type IQueryable.Listing 14-6. A Simple LINQ to SQL Query Returning an IQueryable Sequence

Thành viên chính thức

READ  Độ Echogen Là Gì - Gan Thô: Biến Chứng Của Bệnh Gan Và Cách Điều Trị
*

Xem thêm: giá các loại sữa tươi trên thị trường

IEnumerable dùng cho hầu hết các collectiton của .net framework.IQueryable dùng LINQ to SQL, Entities, hoặc XML objects.IEnumerable dùng để thực hiện các công việc nặng như filter, map, … (local)IQueryable đẩy gánh nặng cho provider (server).ví dụ:

*
*

Trả lời cùng với trích dẫn

Thành viên chính thức

*

IEnumerable dùng cho hầu hết các collectiton của .net framework.IQueryable dùng LINQ to SQL, Entities, hoặc XML objects.IEnumerable dùng để thực hiện các công việc nặng như filter, map, … (local)IQueryable đẩy gánh nặng cho provider (server).ví dụ:

Xem thêm: Cổ Phiếu An Phát Holding – Aph: Ctcp Tập Đoàn An Phát Holdings

Mình xin được phân tích đoạn comment: “sau khi provider trả về tất cả cus. Framework mới lọc ra những cus có city = “London”” trên của bạn ntCuong ra làm 2 phần Phần 1: “sau khi provider trả về tất cả cus.” Ai cũng biết một số framework như Nhibernate, LINQ đều thực hiện tự động sinh ra câu lệnh SQL để query, sau đó convert các bản ghi thành 1 mảng các object, trả về cho người lập trình.Theo như comment của bạn thì LINQ sẽ sinh ra 1 câu lệnh SQL như sau : “select * from Customers”( theo bạn nói là lấy tất cả các cus) sau đó convert thành 1 mảng các object. Nếu như vậy, liệu khi Table Customers có 10.000 bản ghi, nó cũng sẽ trả về 1 mảng bao gồm 10.000 objects customerPhần 2 : Framework mới lọc ra những cus có city = “London”Cũng theo như bạn nói : sau khi trả về 1 mảng 10.000 objects customer chẳng hạn, Framework sẽ lọc và loại bỏ những object customer ko có city là London ?Thế chẳng khác nào việc bắt tất cả cá ở một cái hồ, đem về nhà xong rồi ngồi bắt ra những con cá lớn để bán, còn những con cá nhỏ thì vứt đi. Trong khi việc đó hoàn toàn có thể làm bằng cách chỉ bắt những con cá lớn ở hồ, còn cá nhỏ thì không bắt..vừa đỡ tốn công vận chuyển( ở đây là đỡ tốn tài nguyên hệ thống, cụ thể là local memory)Nếu như theo cách bạn giải thích, thì tôi nghĩ LINQ to SQL đáng để vứt đi so với NHibernateSự khác nhau giữa 2 interface : IEnumerable Và IQueryableThử chạy 1 chương trình đơn giản như sau :

READ  chuyên viên cao cấp là gì

Trả lời

Back to top button