我正在建立一個電影網站。我正在使用mvc3和實體框架。我主要使用LINQ to Entities查詢數據庫。該網站的圖形用戶界面基本上是一個視圖頁面,除了第一次加載,我主要使用Ajax來根據搜索條件等來刷新電影列表。所以我使用一個主要查詢。當我在調試模式下檢查時,我發現每次執行查詢需要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()是直接接近數據庫,並返回爲int的根據影片ID的短名單(celebId)的功能。這就是爲什麼我使用了第一個AsEnumerable(),否則它給出了錯誤「LINQ to Entities does not recognized the method and can not translate ...」 (有趣的是,我應該提到的是我的代碼在調試模式下很慢使用中斷點,沒有它,速度很快,這是在開發中,在生產代碼是非常緩慢的。) 任何人都可以請幫我遮掩一些代碼?我真的很喜歡並且需要改善表現。
oright謝謝,我會嘗試它 – 2012-04-03 08:58:07