今日、EntityFrameworkの実行時間に大きな違いがあることに気づきました。最初のステートメントになぜこれほど多くのオーバーヘッドがあるのか知りたいです。このクエリでは、データベースから5500のトレンドデータ値を取得しています(これは大したことではありません)。
これは私が以前に使用したステートメントです:
TrendDataValues = new ObservableCollection<TrendDataValue>(_trendDataContext.TrendDatas.First(td => td.Id == argument.TrendDataId)
.TrendDataValues
.Where(tdv => tdv.ValueStartTimestamp >= argument.MinValue
&& tdv.ValueStartTimestamp <= argument.MaxValue));
ただし、このステートメントの実行には10秒以上かかります。
最初のステートメントを次のステートメントに書き直しました。これにより、まったく同じデータが取得されます。ただし、このステートメントは0.2秒以内に値を返します。
TrendDataValues = new ObservableCollection<TrendDataValue>(from td in _trendDataContext.TrendDatas.Where(d => d.Id == trendDataId)
from tdv in td.TrendDataValues
where tdv.ValueStartTimestamp >= argument.MinValue
&& tdv.ValueEndTimestamp <= argument.MaxValue
select tdv);
誰かが2つのステートメントの違いを明確にすることができますか?