2

在我的 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方法的任何其他代码。
4

1 回答 1

4

您可以通过使用以下方法实现查询 fe来避免它ToList()

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

这是由于deferred execution .yield return

在 C# 中使用 yield return 迭代器的目的/优势是什么?

于 2012-11-12T21:56:43.020 回答