質問があります:
(from sr in ctx.STARS_Route
where sr.STARS_RouteStopDestination.Any(i => i.IsWorkingSet == true && i.STARS_DistrictRoute.DistrictId == districtId) == true
select sr.DistrictRouteNumber).Distinct();
LinqPadでは、クエリは約0.3秒で実行されていました。STARS_RouteStopDestinationテーブルには約800Kのレコードがありますが、平均リターンは約30〜90レコードです。
実際には、このクエリから結果を返すメソッドは4秒以上かかりました。それは意味がありませんでした。
私が考えることができる唯一のことは、.Any句に多くの時間がかかっていたということですが、LinqPadはクエリが高速であると述べました。テストを設定しました(名前はご容赦ください):
using (STARSEntities ctx = new STARSEntities())
{
var Original = (from sr in ctx.STARS_Route
where sr.STARS_RouteStopDestination.Any(i => i.IsWorkingSet == true && i.STARS_DistrictRoute.DistrictId == districtId) == true
select sr.DistrictRouteNumber).Distinct();
var Entity = (from rsd in ctx.STARS_RouteStopDestination
where rsd.STARS_DistrictRoute.DistrictId == districtId
&& rsd.IsWorkingSet == true
select rsd.STARS_Route.DistrictRouteNumber).Distinct();
DateTime startOriginal = DateTime.Now;
routes = Original.ToList();
Debug.WriteLine("Original took: " + (DateTime.Now - startOriginal).ToString());
DateTime startEtity = DateTime.Now;
routes = Entity.ToList();
Debug.WriteLine("Entity took: " + (DateTime.Now - startEtity).ToString());
}
出力は私を驚かせました:
元の取得:00:00:04.0270000
エンティティの取得:00:00:00.0200000
.Any句を使用したクエリの実行に非常に長い時間がかかるのはなぜですか。また、LinqPadが、同じデータセットに対するエンティティクエリよりも元のクエリの実行速度がわずかに速いと言うのはなぜですか。