2
我對LINQ表達式的編譯和優化以及是否需要小心考慮表達式中let和where子句的順序感興趣。LINQ查詢優化:具體來說,讓子句位置重要嗎?
這裏是例子:
var query =
from record in Database.Table
let recordName = record.GetName()
let notUsed = UselessData()
let stuff = DoSomethingIntensiveWith(record)
where recordName == "foobar"
select stuff;
foreach (string item in query) {
Console.WriteLine("item => '{0}'", item);
}
問題/假設:
record.GetName()
必須以執行where
條款來解決。notUsed
從來沒有用在表達式中,那麼UselessData()
會根本叫做 ?stuff
只有在recordName
等於「foobar」時才需要。將DoSomethingIntensiveWith()
爲每個記錄執行或只是記錄 其中recordName
等於「foobar」?
如果我要確保DoSomethingIntensiveWith()
只調用時 recordName
等於「foobar的」,我還需要 where
條款後的let
caluse的位置,如下所示:
var query =
from record in Database.Table
let recordName = record.GetName()
let notUsed = UselessData()
where recordName == "foobar"
let stuff = DoSomethingIntensiveWith(record)
select stuff;
foreach (string item in query) {
Console.WriteLine("item => '{0}'", item);
}
同時,我要玩一些真實的代碼和調試器。我會 報告我找到的。