2016-05-02 19 views
1

私は、以下のチュートリアルを複数の列を検索するように調整しています。MVC 5複数の列を検索

https://docs.asp.net/en/latest/tutorials/first-mvc-app/search.html

これは、単一の列を検索するには正常に動作します。私の問題は、キーワードの複数の列を検索したいのですが、私が試したことは、結果が 'Or'演算子の代わりに 'And'として動作する場合と同様の動作になりました。どちらの列にもなく、両方の列で機能します)。私は 'else'などの 'case'文を試しましたが、私のロジックが私を失望させました。私は次のように私は物事を試してみましたが、それは唯一と演技のと同じ動作になり、カラム

私のコントローラのコード

public ActionResult Search(string searchString) 
    { 
     var ClipQry = from m in db.Incidents 
         orderby m.ClipName 
         select m.ClipName; 

     var SearchResult = from LoopVar in db.Incidents 
        select LoopVar; 

     if (!String.IsNullOrEmpty(searchString)) 
     { 
      SearchResult = SearchResult.Where(s => s.ClipName.Contains(searchString)); 
     } 


     return View("Search", SearchResult); 
    } 

ビューコード

<form asp-controller="Incidents" asp-action="Index" method="get"> 
    <p> 
     <input type="text" name="SearchString" class="form-control" placeholder="Search..."> 
    </p> 
</form> 

のいずれかに存在を検索したいです'AND'演算子

 if (!String.IsNullOrEmpty(searchString)) 
     { 
      SearchResult = SearchResult.Where(s => s.ClipName.Contains(searchString)); 
      SearchResult = SearchResult.Where(y => y.ClipKeywords.Contains(searchString)); 
     } 

答えて

2

現在のコードはでフィルタリングしていますまずプロパティをに設定し、結果をSearchResult変数に代入します。次に、2行目で、同じ結果(SearchResult、これは前の行のフィルタリングされた結果)のプロパティClipKeywordsのフィルタを実行しています。あなたはをここでやっています。

where句にまたはを指定できます。

if (!String.IsNullOrEmpty(searchString)) 
{ 
    SearchResult = SearchResult 
       .Where(s => s.ClipName.Contains(searchString) 
          ||s.ClipKeywords.Contains(searchString)); 
} 
+0

本当にありがとう、私は本当に論理に苦しんでいた。あなたの助けは本当に感謝しています:) –