yield返回慢速数据库调用

时间:2012-11-12 21:53:22

标签: c# asp.net yield-return

在我的ASP项目中有这样的代码,用rr填充RegulationGroups

private IEnumerable<RegulationGroup> LoadRegulations(string moduleName)  
{
    // database calls
    yield return subLrg;
}

在一个单独的类中,代码循环多次

foreach (RegulationGroup rg in rr.RegulationGroups)     
{

}

每次代码循环RegulationGroups时,都会发生数据库调用。如何避免数据库调用?

我想我可以

  1. 取消yield return并使用List
  2. IEnumerable缓存到列表中并在我的模块中使用它,以便它不会影响使用LoadRegulations方法的任何其他代码。

1 个答案:

答案 0 :(得分:4)

您可以通过实现查询来避免它,例如。使用ToList()

var regulations = LoadRegulations("moduleName").ToList();

这是由于deferred execution的{​​{1}}的性质。

What is the purpose/advantage of using yield return iterators in C#?