新しいmvc4ajaxコントローラーテンプレートを使用していますが、データベースクエリに検索を追加する方法がわかりません。
Articleというモデルがあるとしましょう。これは、コントローラーにデフォルトで含まれているものです。
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を使用することに慣れているだけです。
編集
たくさん読んだ後、私は何が起こっているのかをよりよく理解しましたが、それでもこれを機能させることはできません。
これによると、私はこれに似たものが必要なようです:
articles = articles.Where("it.Title = @searchString");
ただし、これはsearchStringがタイトルと完全に一致する場合にのみ機能すると思います。これが何をしているのかまだよくわかりませんが、SQL式を使用していると思うので、これでうまくいくと思いました。
articles = articles.Where("it.Title like '%@searchString%'");
しかし、これはどれもうまくいきませんでした。私はこれに慣れていないので、暗闇の中で撮影しているだけです。