2

私のASPプロジェクトには、次のようなコードがありますrrRegulationGroups

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 に答える