Sử dụng khung thực thể Tôi chọn một số dữ liệu từ một bảng và lặp lại nó với vòng lặp foreach
. Tôi tự hỏi khi nào dữ liệu được truy vấn trong các ví dụ sau?iterating over DbSet <TEntity> vs IQueryable <out T>
Ví dụ 1.
var countries = db.WorldCountries;
foreach(var item in countries)
{
Console.WriteLine("Country: {0}", item.Country);
}
Ví dụ 2.
var countries = db.WorldCountries.Where(t => t.Country == "Country Name");
foreach(var item in countries)
{
Console.WriteLine("Country: {0}", item.Country);
}
Trong ví dụ đầu tiên, countries
là DbSet<WorldCountries>
Trong ví dụ thứ hai, countries
là IQueryable<out WorldCountries>
.
Nếu không có .ToList()
trong ví dụ trên, dữ liệu được truy xuất như thế nào? Toàn bộ tập dữ liệu có được truy xuất khi vòng lặp foreach
bắt đầu (như thể .ToList()
được gọi ở đầu vòng lặp đầu tiên) hoặc truy vấn được phát hành cho cơ sở dữ liệu trên mỗi lần lặp của vòng lặp.
Cảm ơn.
Bạn có chắc chắn rằng việc truyền dữ liệu được thực hiện từng mảnh, nếu bạn có bất kỳ tham chiếu nào về điều đó không? Tôi rất tò mò về điều này –
Tôi đã có thể xác nhận rằng bạn là chính xác, nó thực sự kéo dữ liệu theo lô, không phải tất cả cùng một lúc. Tôi đã viết một bài kiểm tra bằng cách lặp qua một dbset lớn - một phần thông qua tôi giết kết nối db đó, và như mong đợi một lỗi đã được ném. –