Đầu ra là 2,4,6,8
do thực hiện hoãn lại .
Truy vấn được thực hiện khi biến truy vấn được lặp lại, không phải khi biến truy vấn được tạo. Điều này được gọi là thực hiện hoãn lại.
- Suprotim Agarwal, "Trì hoãn so với thực thi truy vấn ngay lập tức trong LINQ"
Có một thực thi khác gọi là Thực thi truy vấn tức thời , rất hữu ích cho kết quả truy vấn bộ đệm. Từ Suprotim Agarwal một lần nữa:
Để buộc thực thi ngay một truy vấn không tạo ra giá trị đơn lẻ, bạn có thể gọi phương thức ToList(), ToDictionary(), ToArray(), Count(), Average()
hoặc Max()
phương thức trên một truy vấn hoặc biến truy vấn. Chúng được gọi là các toán tử chuyển đổi cho phép bạn tạo một bản sao / ảnh chụp kết quả và quyền truy cập nhiều lần bạn muốn mà không cần phải thực hiện lại truy vấn.
Nếu bạn muốn đầu ra là 2,4,6
, sử dụng .ToList()
:
var list = new List<int>{1,2,4,5,6};
var even = list.Where(m => m%2 == 0).ToList();
list.Add(8);
foreach (var i in even)
{
Console.WriteLine(i);
}