2012-11-12 70 views
2

在我的ASP項目有這樣的代碼,用RegulationGroups收益率回報慢的數據庫調用

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

填充rr在一個單獨的類,代碼循環遍歷多次

foreach (RegulationGroup rg in rr.RegulationGroups)  
{ 

} 

每次數據庫調用發生時代碼循環通過RegulationGroups。我怎樣才能避免數據庫調用?

我想我可以

  1. yield return做掉,並在列表中使用List
  2. 緩存IEnumerable和我的模塊中使用它,使它不使用LoadRegulations影響任何其他代碼方法。
+3

旁註:你的變量名是smwht shrtnd。請考慮在公共代碼中使用合理可理解的名稱(或明顯假冒)。 –

+0

你也很可能不需要'收益'的項目。 AsEnumerable的機會同樣可以發揮作用,並且更有效率。 – Servy

回答

4

您可以通過來避免它查詢f.e.通過使用ToList()

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

這是由於的yield returndeferred execution性質。

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

+0

我在這個問題中沒有看到任何關於LINQ的提及。 'yield return'也使用延遲執行,但是說它是由LINQ中的某些東西引起的,是不準確的。 – svick

+0

是的,除了現在鏈接沒有意義,因爲它談論的是LINQ,而不是'yield return'。 :-) – svick