0
我遇到使用LINQ一些性能問題,導致我對我的第一個計算器問題:的LINQ查詢鏈執行順序
的測試功能在下面的代碼,執行的次數differente數這兩個linqs查詢:
int[] mydata = { 1, 2, 34, 5, 67, 8 };
var query = from i in mydata select new { i,v=test(i)};
var query2 = query.Where(v=>v.v == 2);
MessageBox.Show(query2.Count().ToString());
var query = from i in mydata where i==2 select new { i,v=test(i)};
MessageBox.Show(query.Count().ToString());
而且伯爵()函數,確確實實需要評估選擇部分?這也意味着執行query2.Select(i => i)將激發測試()調用
如果這是要走的路,要執行類似調用的延遲過濾器,應將第二個查詢更改爲減少unnecesary測試()調用:
var query = from i in mydata where (filter ? v=filtevalue : true) select new { v=test(i)};
MessageBox.Show(query.Count().ToString());
我需要執行是建立一個大的查詢中,然後過濾,在程序的不同部分的數據不執行的是filterout數據選擇部分(以避免性能損失)。這可能嗎?
在此先感謝。