LINQ to Object 如何执行查询

LINQ 查询不会立即执行。在构建查询时,你只需存储查询以供将来执行。只有当你实际请求迭代查询时才执行查询(例如,在 for 循环中,当调用 ToList,Count,Max,Average,First 等时)

这被认为是延期执行。这允许你在多个步骤中构建查询,可能基于条件语句对其进行修改,然后仅在需要结果时才执行它。

鉴于代码:

var query = from n in numbers 
            where n % 2 != 0
            select n;

上面的示例仅将查询存储到 query 变量中。它不执行查询本身。

foreach 语句强制查询执行:

foreach(var n in query) {
    Console.WriteLine($"Number selected {n}");
}

一些 LINQ 方法也会触发查询执行,CountFirstMaxAverage。它们返回单个值。ToListToArray 收集结果并分别将它们转换为 List 或 Array。

请注意,如果在同一查询上调用多个 LINQ 函数,则可以多次遍历查询。这可以在每次通话时给出不同的结果。如果你只想使用一个数据集,请确保将其保存到列表或数组中。