私が解決策を見つけたので、実際の質問よりも明確な質問です。理屈だけではわからない…
SQLLite 3.8.3.1 を使用する SQLite-net 2.1 を使用する
a の実行と a の実行には明確な違いが.Where(lambda).FirstOrDefault()
あり.FirstOrDefault(lambda)
ます。
Linq での私の経験によると、データベース LINQ プロバイダーはこれらの両方を本質的に同じように扱います (.FirstOrDefault(lambda)
適切に最適化されている場合は少し速くなる可能性がありますが、概して、これら 2 つの呼び出しの実行にはほぼ同じ時間がかかります)。
ただし、SQLite-net では、約 40,000 レコードを含むテーブルで次の結果が表示されます。
実行.FirstOrDefault(x => x.Id == id)
中、Core-i7 にかかる時間が2200ms から 3700msの間であることがわかります。Surface RT (第 1 世代) では、実際には約 20,000 ミリ秒から 30,000 ミリ秒かかります。
を実行する.Where(x => x.Id == id).FirstOrDefault()
と、同じ Core-i7 にかかる時間が16ms から 20msの間であることがわかります。Surface RT では、これには約 30 ミリ秒かかります。
私の質問は、これが単なるバグなのか、それとも意識的な設計上の決定なのかということです。それが設計上の決定である場合、その背後にある理由を理解したいと思います.