我有從C#書驗證碼:強制LINQ重新執行?
int minSize = 10000;
var bigFiles = from file in GetAllFilesInDirectory(@"c:\")
where new FileInfo(file).Length > minSize
select file;
var filesOver10k = bigFiles.ToArray();
minSize = 100000;
var filesOver100k = bigFiles.ToArray();
minSize = 1000000;
var filesOver1MB = bigFiles.ToArray();
minSize = 10000000;
var filesOver10MB = bigFiles.ToArray();
筆者表示,將重新評估該查詢每次ToArray的()被調用。我想做類似的事情。我需要查詢一本書中每個字母的使用次數;目前我使用的是這樣的:
string alphabet="abcdefghijklmnopqrstuvwxyz";
foreach(char a in alphabet)
{
var stat_letter=book2.book.Sum(b=>b.chapter.Sum(l=>l.line.Sum(w=>w.word.ToLower().Count(c=>c.Equals(a)))));
Console.WriteLine(a + ":" + stat_letter.ToString());
}
輸出我得到:
a: 31278
b: 6263
c: 14561
[...]
我想改變它的工作很像書例如:
char q = 'a';
var stat_letter = book2.book.Sum(b=>b.chapter.Sum(l=>l.line.Sum(w=>w.word.ToLower().Count(c=>c.Equals(q)))));
string alphabet="abcdefghijklmnopqrstuvwxyz";
foreach(char a in alphabet)
{
q=a;
Console.WriteLine(q + ":" + stat_letter.ToString());
}
輸出我從中得到:
a: 31278
b: 31278
c: 31278
[...]
它看起來像在這種情況下查詢不重新評估。有什麼辦法強制它?其實我的動機是檢查它是否會加快程序執行速度,所以如果你認爲它不會,那也是我想知道的...
Downvoter關心評論?我的解釋與下面的答案大致相同,其中有6個upvotes ...也許最後一句只是我的意見,但答案是準確的。 – evanmcdonnal