2013-06-06 58 views
4

我想清除我對LINQ的疑問。 我有這樣的代碼:Linq查詢在foreach

val collection = this.Employees.Where(emp => emp.IsActive) 
foreach (var emp in collection) 
{ 
    // some stuff 
} 

現在,如果我寫這樣的代碼:

foreach (var emp in this.Employees.Where(emp => emp.IsActive)) 
{ 
    // some stuff 
} 

this.Employees.Where(emp => emp.IsActive)執行每次迭代或者只執行一次?

+3

只有一次。否則,你總是會處理第一條記錄。 –

回答

6

你可以認爲foreach因爲這樣的:

foreach (var x in y) 
    // ... 

就象這樣:

T x; 
using (var enumerator = y.GetEnumerator()) 
{ 
    while (enumerator.MoveNext()) 
    { 
     x = enumerator.Current; 
     // ... 
    } 
} 

這樣的兩段代碼,你會表現出有同樣的效果。

for然而不同的是:

for (int index = 0; index < s.Length; index++) 

這裏s.Length將在循環的每次迭代進行評估。

5

它只會執行一次。對於運行時,這兩個語句具有完全相同的效果。

0

它只會執行一次...

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你可以隨時評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/faq#reputation),你將能夠[評論任何帖子](http://stackoverflow.com/privileges/comment)。 – fedorqui

+0

好吧,下次還會記得這個...謝謝 –

+0

順便說一下,這是一個自動評論後審閱http://stackoverflow.com/review/low-quality-posts/ – fedorqui