Outputnya adalah 2,4,6,8
karena eksekusi yang ditangguhkan .
Permintaan sebenarnya dieksekusi ketika variabel kueri diulangi, bukan saat variabel kueri dibuat. Ini disebut eksekusi yang ditangguhkan.
- Suprotim Agarwal, "Eksekusi Kueri Ditunda vs Segera di LINQ"
Ada eksekusi lain yang disebut Eksekusi Kueri Segera , yang berguna untuk caching hasil pencarian. Dari Suprotim Agarwal lagi:
Untuk memaksa eksekusi segera dari sebuah query yang tidak menghasilkan nilai tunggal, Anda bisa memanggil metode ToList(), ToDictionary(), ToArray(), Count(), Average()
atau Max()
pada variabel query atau query. Ini disebut operator konversi yang memungkinkan Anda untuk membuat salinan / snapshot dari hasil dan akses sebanyak yang Anda inginkan, tanpa perlu menjalankan kembali kueri.
Jika Anda ingin hasilnya 2,4,6
, gunakan .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);
}