2012-04-02 14 views
1

映画サイトを構築しています。私はmvc3とエンティティフレームワークを使用しています。私は主にLINQ to Entitiesを使用してデータベースを照会しています。サイトのGUIは、最初の読み込みの横にある基本的に1つのビューページです。私は主にAjaxを使用して、検索条件などに従ってムービーリストを更新します。だから私は1つのメインクエリを使用します。デバッグモードでこれをチェックすると、実行するたびに10秒かかります。これはもちろん非常に遅いです。私は私の基礎知識に基づいてデータベースを索引付けしました。ここでの主なクエリコードです:linq 2エンティティを使用するとパフォーマンスが低下します

var casts = MovieCasts.Where(d => 
      movieIds.Contains(d.MovieId) 
      && d.WorkingTitleId != null &&    
      actorAndActressWtIds.Contains((int)d.WorkingTitleId)).AsEnumerable() 
      .Where(d=>GetMoviesTop4CelebIds(d.MovieId).Contains(d.CelebId)) 
      .AsQueryable() 
      .Select(d =>new MCast 
      { 
       MovieId = d.MovieId, 
       Id = d.Id, 
       CelebId = d.CelebId, 
       CelebPageViews = d.Celebrity.PageViews, 
       ActingParts = string.Join(",",d.ActingParts.Select(e => e.Name)), 
       ActorName = HttpUtility.HtmlDecode(d.Celebrity.ShortName) ??    
          HttpUtility.HtmlDecode(d.Celebrity.BirthName), 
          }).ToList(); 

GetMoviesTop4CelebIds()は、ムービーIDに応じて(celebId)を直接データベースに近づき、int型の短いリストを返す関数です。これは私が最初のAsEnumerable()を使用した理由です。そうでなければ、 "LINQ to Entitiesはメソッドを認識せず、変換できません..." (面白いのは、私のコードはデバッグモードで遅いですコードが非常に遅いです。) 誰かがコードを少し明るくするのを助けてくれますか?私は本当に大好きで、パフォーマンスを改善する必要があります。

答えて

2

AsEnumerable()を呼び出すと、その時点でLinq to Entitiesクエリが実行され、残りの操作がLinq to Objectsを使用して実行されます。 を個別にに実行してから、の前にこのクエリを実行し、メソッド呼び出しの代わりにクエリの結果の値を使用します。

+1

oright私はそれを試していただきありがとうございます –

関連する問題