在我的ASP项目中有这样的代码,用rr
填充RegulationGroups
private IEnumerable<RegulationGroup> LoadRegulations(string moduleName)
{
// database calls
yield return subLrg;
}
在一个单独的类中,代码循环多次
foreach (RegulationGroup rg in rr.RegulationGroups)
{
}
每次代码循环RegulationGroups
时,都会发生数据库调用。如何避免数据库调用?
我想我可以
yield return
并使用List
IEnumerable
缓存到列表中并在我的模块中使用它,以便它不会影响使用LoadRegulations
方法的任何其他代码。答案 0 :(得分:4)
您可以通过实现查询来避免它,例如。使用ToList()
:
var regulations = LoadRegulations("moduleName").ToList();
这是由于deferred execution
的{{1}}的性质。
What is the purpose/advantage of using yield return iterators in C#?