2012-01-31 48 views
0

我正在使用新的mvc4 ajax控制器模板,我不知道如何將搜索添加到數據庫查詢中。如何檢查數據庫條目是否包含使用ObjectQuery(Of T)的類

比方說,我有一個模型叫文章,這裏是控制器默認包含:

ObjectQuery<Article> articles = (db as IObjectContextAdapter).ObjectContext.CreateObjectSet<Article>(); 
articles = articles.OrderBy("it." + orderBy + (desc ? " desc" : "")); 

這工作得很好,但我不是家族與IObjectContextAdapter,我不知道如何添加搜索(即看是否有文章包含的術語。)一般情況下我有這樣的事情:

var articles = from a in db.Articles.ToList() 
          select a; 
if(!String.IsNullOrEmpty(search)) 
{ 
    articles = articles.Where(a => a.Title.ToLower().Contains(search.ToLower()) 
             || a.FullArticle.ToLower().Contains(search.ToLower()) 
             || a.TagsAndKeywords.ToLower().Contains(search.ToLower())); 
} 
switch(orderBy) 
{ 
    case "TimeStamp": 
     if(desc) 
      articles = articles.OrderByDescending(a => a.TimeStamp); 
     else 
      articles = articles.OrderBy(a => a.TimeStamp); 
      break; 
    case "Title": 
    ... 
} 

顯然,這樣的新方式更加簡潔,所以我想堅持這一點。我嘗試了將它們組合起來,使用linq查詢來填充var文章,但後來我無法使用部分的順序,.OrderBy(「it。」+ orderBy +(desc?「desc」:「」))。

所以我的問題是什麼是通過我的數據庫進行搜索的最佳方式?這究竟是什麼.OrderBy(「it。」+ orderBy +(desc?「desc」:「」))在做什麼?我只用linq的OrderBy來完成家庭功能。

編輯

大量的閱讀之後,我有一個更好的瞭解是怎麼回事,但我仍然不能得到這個工作的。

根據this好像我需要一些與此類似:

articles = articles.Where("it.Title = @searchString"); 

但我認爲,如果搜索字符串完全匹配的標題這隻會工作。雖然我還是不太明白這是什麼做的,我覺得它使用SQL表達式,所以我認爲這可能工作:

articles = articles.Where("it.Title like '%@searchString%'"); 

但這一切工作,而我只能在黑暗中,因爲我拍攝我不熟悉這一點。

回答

0

最簡潔的方式來查詢您的模型,而無需改變mvc4模板代碼是創建一個IQueryable對象,並對其進行查詢,像這樣:

ObjectQuery<Article> articles = (db as IObjectContextAdapter).ObjectContext.CreateObjectSet<Article>(); 
articles = articles.OrderBy("it." + orderBy + ((bool)desc ? " desc" : "")); 

IQueryable<Article> iArticles = articles; 

if(!String.IsNullOrEmpty(search)) 
    iArticles = iArticles.Where(a => a.Title.Contains(search) || 
                a.FullArticle.Contains(search)); 

Response.AppendHeader("X-Total-Row-Count", iArticles.Count().ToString()); 

return PartialView(iArticles.Skip(start).Take((int)itemsPerPage)); 

這保留條目以正確的順序,並且一定要返回新的iArticles而不是舊文章。

相關問題