gpt4 book ai didi

c# - foreach 只执行一次查询吗?

转载 作者:IT王子 更新时间:2023-10-29 04:38:23 30 4
gpt4 key购买 nike

我有一个项目列表和一个针对它们的 LINQ 查询。现在,有了 LINQ 的延迟执行,后续的 foreach 循环会只执行一次查询还是在循环中的每个回合执行查询?

给出这个例子(取自 Introduction to LINQ Queries (C#), on MSDN )

    // The Three Parts of a LINQ Query: 
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

// 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;

// 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}

或者,换句话说,如果我有什么不同:

    foreach (int num in numQuery.ToList())

而且,如果底层数据不在数组中,而是在数据库中,这有关系吗?

最佳答案

Now, with LINQ's deferred execution, would a subsequent foreach loop execute the query only once or for each turn in the loop?

是的,一次循环。实际上,它可能会执行查询不到一次 - 您可以在中途中止循环,并且不会对任何剩余项目执行 (num % 2) == 0 测试。

Or, in other words, would there be any difference if I had:

foreach (int num in numQuery.ToList())

两个区别:

  1. 在上面的例子中,ToList() 浪费时间和内存,因为它首先做与初始 foreach 相同的事情,从中构建一个列表,然后是 foreach 列表。差异介于微不足道和阻止代码正常工作之间,具体取决于结果的大小。

  2. 但是,如果您要重复对相同的结果执行foreach,或者以其他方式重复使用它,那么当foreach 只运行一次查询,下一个 foreach 再次运行它。如果查询开销很大,那么 ToList() 方法(并存储该列表)可以节省大量资金。

关于c# - foreach 只执行一次查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250561/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com