我正在阅读LINQ。我知道有延迟和即时查询。我知道在枚举时运行查询的延迟类型允许对数据集的任何更改反映在每个枚举中。但是,如果在上次枚举后数据集没有发生任何变化的情况下有一种机制可以防止查询运行,我似乎无法找到答案。
我在MSDN上阅读了LINQ查询:
因此,如果查询被枚举两次,它将被执行两次。
我忽略了一个明显的 - 但是......?
答案 0 :(得分:2)
确实,没有。实际上,这不是相当是真的 - 一些LINQ提供商会发现琐碎但常见的例子,如:
int id = ...
var customer = ctx.Customers.SingleOrDefault(x => x.Id == id);
并将通过身份管理器拦截它,即它将检查它是否已在上下文中具有匹配的记录;如果是的话:它不会执行任何操作。
您应该注意,重新执行也与数据是否发生变化无关;它将重新执行(或不重新),无论。
这里有两条外卖消息:
所以:
var list = someQuery.ToList();
无论您迭代list
多少次,都不会重新执行查询。由于list
不是查询:它是列表。
第三个外卖将是: