連鎖LINQクエリを以下のように実行しています。私はquery.ToList();
の遅さの原因を調べようとしています。 SQLクエリは高速(ミリ秒)ですが、コードには1分かかります。チェーニングの理由は、リポジトリ機能を再利用するためです。LINQクエリを連鎖させるときの遅さ
- ここで遅い理由はありますか?
- これをどのように最適化できますか?
query.ToList();
を実行しているときに実行される実際のSQLクエリを確認するにはどうすればよいですか?//Client var query = _service.GetResultsByStatus(status, bType, tType); var result = query.ToList(); //takes a long time to execute //Service function public IEnumerable<CustomResult> GetResultsByStatus(string status, string bType, string tType) { IEnumerable<CustomResult> result = null; result = repo.GetResults(bType).Where(item => item.tStatus == status && (tType == null || item.tType == tType)) .Select(item => new CustomResult { A = item.A, B = item.B, }); return result; } // Repository Function (reused in many places) public IEnumerable<my_model> GetResults(string bType) { return from p in dbContext.my_model() where p.bType.Equals(bType) select p; }
説明をいただきありがとうございます。このソリューションは魅力的に機能しました。 IEnumerableを持つ考えは、遅延実行には十分でした。 – devnull
@devnull 'IEnumerable <*' * is * "遅延実行" ... "Where"と "When"は直交する概念です。配列/リストvs IQueryable/IEnumerableは、IEnumerableとIQueryavbleがどこにあるか – xanatos