Data flow · IQueryable và IEnumerable
ToList() đặt ở đâu quyết định bao nhiêu dòng đi qua mạng
ToList() trước và sau Where
Đặt ToList() trước Where kéo cả ba triệu dòng của bảng Orders vào bộ nhớ rồi mới lọc; để Where trên IQueryable thì điều kiện được dịch sang WHERE trong SQL và chỉ vài chục dòng cần lấy đi qua mạng.
DATABASE
TIẾN TRÌNH .NET
3 TRIỆU DÒNG
VÀI CHỤC DÒNG
Bảng Orders
SELECT *
Cả bảng vào RAM
.ToList()
Lọc trong bộ nhớ
.Where(o => …)
Bảng Orders
_db.Orders
Lọc trong database
WHERE CustomerId = @id
Chỉ dòng cần lấy
.ToListAsync(ct)
SAI · TOLIST() ĐẶT TRƯỚC WHERE
ĐÚNG · WHERE ĐƯỢC DỊCH SANG SQL
© tiennhm