2012-01-31 7 views
0

新しいmvc4 ajaxコントローラテンプレートを使用していますが、データベースクエリに検索を追加する方法がわかりません。ObjectQuery(Of T)クラスを使用してdbエントリに何かが含まれているかどうかを確認する方法

のは、私はここに、条というモデルがあるとしましょう、コントローラがデフォルトで含まれているものです:

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( "それ" + orderBy +(desc? "desc": ""))やっている?私はlinqでOrderByを使うだけで家族性です。私はまだこれが仕事を得ることができないが、何が起こっているのより良い理解を持って読書をたくさんした後

編集

。私はsearchStringのは、まさにタイトルに一致した場合にのみ動作すると思いますが、

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

:私はこれに似た何かを必要とするよう

thisによると、それはそうです。

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

しかし、これのどれも働いていない、と私は私だけので、暗闇の中で撮影しています:私はまだかなりこれが何をしているかを理解していませんが、私はこれが動作していることを考えて、それは、SQL式を使用して考えますこれに慣れていない。

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)); 

この正しい順序でエントリを維持し、点を確認してください。

答えて

0

mvc4テンプレートコードを変更せずに、あなたのモデルを照会するための最も簡潔な方法は、のIQueryableオブジェクトを作成し、それを照会し、このようにすることです古い記事の代わりに新しいiArticlesを返します。

関連する問題