2016-03-31 6 views
0

レコードを検索できるビューがあります。
MVC。複数の条件で検索する

@using (Html.BeginForm("Index", "Project", FormMethod.Get, new { role = "form" })) 
{ 

    <div class="input-group"> 
     <input name="Query" type="text" class="form-control" placeholder=""> 
     <span class="input-group-btn" style="width:0;"> 
      <button class="btn btn-default" type="submit">Search</button> 
     </span> 
    </div> 
} 

@if (Model.Any()) 
{ 
    <div class="col-md-10"> 
     <table class="table table-striped table-hover"> 
      <tr> 
       <th> 
        Year 
       </th> 
       <th> 
        Project 
       </th> 
       <th> 
        Status 
       </th> 
       <th> 

       </th> 
      </tr> 

      @foreach (var item in Model) 
     { 
       <tr> 
        <td> 
         @Html.DisplayFor(m => item.PROJ_YEAR) 
        </td> 
        <td> 
         @Html.DisplayFor(m => item.PROJ_NAME) 
        </td> 
        <td> 
         @Html.DisplayFor(m => item.PROJ_STATUS) 
        </td> 
       </tr> 
      } 
     </table>} 
else 
{ 
    <p style="margin:20px 0;">No Projects found.</p> 
} 

と、ここで私が検索を実行すると、それだけでPROJ_NAMEに基づいて検索を実行しますコントローラ

public ActionResult Index(int page = 1, string Query = null) 

{ 
    var projectList = db.TBL_PROJECTS.Include(x => x.TBL_STATUS).Where(x => x.PROJ_CAT == 1).ToList().OrderByDescending(x => x.ID); 

    if (!string.IsNullOrEmpty(Query)) 
     { 
      projectList = projectList 
       .Where(x => x.PROJ_NAME.ToLower().Contains(Query.ToLower())) 
       .ToList().OrderByDescending(x => x.ID); 

      if (projectList.Count() == 0) 
      { 
       var list = db.TBL_PROJECTS.Include(x => x.TBL_STATUS).Where(x => x.PROJ_CAT == 1).ToList().OrderByDescending(x => x.ID); 
       projectList = list 
       .Where(x => x.PROJ_YEAR.ToLower().Contains(Query.ToLower())) 
       .ToList().OrderByDescending(x => x.ID); 

      } 

     } 
    return View(new PagedList.PagedList<TBL_PROJECT>(projectList, page, 15)); 
} 

です。 「PROJ_YEAR」でも検索したいです。 "1998"を検索すると、レコードが見つかりません。 1998年の「Paint Job」を検索すると、レコードが表示されます。

答えて

0

が見つかりました。これは、この種の問題が後で起こった人には役に立ちます。これが私のやり方です。

if (!string.IsNullOrEmpty(Query)) 
     { 
      projectList = projectList 
       .Where(x => x.PROJ_NAME.ToLower().Contains(Query.ToLower())) 
       .ToList().OrderByDescending(x => x.ID); 
      if (projectList.Count() == 0) 
      { 
       var list = db.TBL_PROJECTS.Include(x => x.TBL_STATUS).Where(x => x.PROJ_CAT == 1).ToList().OrderByDescending(x => x.ID); 
       var k = list 
       .Where(x => x.PROJ_YEAR != null) 
       .ToList().OrderByDescending(x => x.ID); 
       projectList = k 
       .Where(x => x.PROJ_YEAR.ToLower().Contains(Query.ToLower())) 
       .ToList().OrderByDescending(x => x.ID); 


      } 
0
projectList = projectList 
       .Where(x => x.PROJ_NAME.ToLower().Contains(Query.ToLower()) 
         || x.PROJ_YEAR = Int32.Parse(Query) ) 
       .ToList().OrderByDescending(x => x.ID); 

それとものみプロジェクト名]列を比較しているのでInt32.TryParse()

0

を使用しています。そのため、あなたが年を提出するとき、それはうまくいかない。コントローラーを変更する必要があります。たとえば、

public ActionResult Index(int page = 1, string Query = null) 

    { 
     var projectList = db.TBL_PROJECTS.Include(x => x.TBL_STATUS).Where(x => x.PROJ_CAT == 1).ToList().OrderByDescending(x => x.ID); 

     if (!string.IsNullOrEmpty(Query)) 
     { 
      projectList = projectList 
       .Where(x => x.PROJ_NAME.ToLower().Contains(Query.ToLower()) 
         || x.PROJ_YEAR.ToLower().Contains(Query.ToLower())) 
       .ToList().OrderByDescending(x => x.ID); 

     } 

     return View(new PagedList.PagedList<TBL_PROJECT>(projectList, page, 15)); 
    } 
+0

私はこれを試して、代わりにこのエラーを取得します。 {"オブジェクト参照がオブジェクトのインスタンスに設定されていません"} – Waller

+0

あなたのコードでは、いくつかの問題がnull例外をスローする可能性があります。ここでアイデアを試してみましょう。プロジェクト名と年を比較する必要があるということです。たとえば、Query = nullの場合、Query.ToLower()で例外がスローされ、結果がnullの場合、ToList()で例外がスローされます。 –

+0

コントローラコードは更新されましたが、同じエラーが発生しました。いくつかのコード例を表示できますか? – Waller