LINQ 式のコンパイルと最適化、および式の let 句と where 句の順序を慎重に検討する必要があるかどうかに関心があります。
次に例を示します。
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()
すべてのレコードに対して実行されますか、または「foobar」に等しいレコードのみに対して実行されますrecordName
か?
「foobar」に等しいDoSomethingIntensiveWith()
場合にのみ呼び出される
ようにしたい場合は、次のように、節の後にカルセ
を配置する必要がありますか?recordName
let
where
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);
}
それまでの間、実際のコードとデバッガーで遊んでみます。見つけたものはまた報告します。