gpt4 book ai didi

c# - 在 LINQ 中使用时,语句是否在每次迭代中都重新计算?

转载 作者:行者123 更新时间:2023-11-30 20:20:11 26 4
gpt4 key购买 nike

例如

myEnumerable.Where(v => v != myDictionary["someKey"])

当调用此查询时,执行的是 myDictionary["someKey"] 语句(意味着查询字典中的键)或 myDictionary["someKey"] 的结果>在第一次迭代后使用?

最佳答案

myDictionary["someKey"] 的结果将不会被缓存(*见下面的编辑),它将在 myEnumerable< 的每个项目上访问。但是,您仍然可以手动缓存它:

var someValue = myDictionary["someKey"];
myEnumerable.Where(v => v != someValue)

另请注意,如果您计划多次迭代/访问 IEnumerable,最好通过 ToList() 实现它。或者,每次都会延迟执行。

var query = myEnumerable.Where(v => v != myDictionary["someKey"]);

foreach (var item in query) { /* ... */}
foreach (var item in query) { /* ... */}

在上面的例子中,Where子句被执行了两次。


编辑:正如@LucasTrzesniewski 所指出的,这仅适用于LINQ-to-Objects。这是因为查询是在内存中计算的。但是,对于 LINQ-to-Entities,它有点不同,因为查询将转换为 SQL 查询,然后在数据库中执行以避免往返。

关于c# - 在 LINQ 中使用时,语句是否在每次迭代中都重新计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37331554/

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