延遲執行與立即執行

一些 LINQ 方法返回一個查詢物件。此物件不包含查詢結果; 相反,它具有生成這些結果所需的所有資訊:

var list = new List<int>() {1, 2, 3, 4, 5};
var query = list.Select(x => {
    Console.Write($"{x} ");
    return x;
});

該查詢包含對 Console.Write 的呼叫,但沒有輸出到控制檯。這是因為查詢尚未執行,因此傳遞給 Select 的函式從未被評估過。這稱為延遲執行 - 查詢的執行會延遲到稍後的某個時間點。

其他 LINQ 方法強制立即執行查詢; 這些方法執行查詢並生成其值:

var newList = query.ToList();

此時,將為原始列表中的每個值評估傳遞到 Select 的函式,並將以下內容輸出到控制檯:

1 2 3 4 5

通常,返回單個值(例如 MaxCount)的 LINQ 方法或返回實際儲存值的物件(例如 ToListToDictionary)立即執行。

返回 IEnumerable<T>IQueryable<T> 的方法返回查詢物件,並允許將執行推遲到稍後的點。

是否有特定的 LINQ 方法強制查詢立即執行,可以在 MSDN - C#VB.NET 中找到