2016-08-03 9 views
1

MVCアプリケーションで非常に単純な検索フォームを作成しました。これにより、ユーザーは文字列を検索して結果を返すことができます。 2つの日付の間にユーザーの検索を許可したいのですが、どのようにプログラムするのかはわかりません。Cを使用して2つの日付を検索するにはどうすればいいですか

ここまでは私のコードです。これは、コントローラにパラメータとして渡される文字列を検索する場合にのみ使用されます。私は日付ピッカーのコードを書いて始めたが、私は立ち往生してしまった。

ビュー

<h2>Search</h2> 
@using (Ajax.BeginForm("Search", "Search", new AjaxOptions 
{ 
    OnSuccess = "Success", 
    OnFailure = "Failure", 
    UpdateTargetId = "test", 
    InsertionMode = InsertionMode.Replace 
})) 
{ 
<table class="table"> 
    <tr> 
     <td><label>Vessel Name</label></td> 
     <td>@Html.TextBox("term",null, new { @class = "k-textbox" })</td> 
    </tr> 
    <tr> 
     <td> 
      <label>From</label> 
      @(Html.Kendo().DatePicker() 
       .Name("date_from") 
       .Value(DateTime.Today) 
       ) 
     </td> 
     <td> 
      <label>To</label> 
      @(Html.Kendo().DatePicker() 
       .Name("date_to") 
       .Value(DateTime.Today)   
      ) 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <input type="submit" value="Search" /> 
     </td> 
    </tr>   
</table>  
} 

<table class="table"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Location</th> 
      <th>MMSI</th> 
      <th>Created</th> 
     </tr> 
    </thead> 
    <tbody id="test"> 
     @Html.Partial("_results")  
    </tbody> 
</table> 

コントローラ

public ActionResult Search(string term, DateTime date_from, DateTime date_to) 
    { 
     var vessels = (from o in db.vessels 
         select o); 

     if (!String.IsNullOrEmpty(term)) 
     { 
      vessels = vessels.Where(s => 
       s.vessel_name.Contains(term) || 
       s.vessel_location.Contains(term) || 
       s.vessel_mmsi.Contains(term)); 
     }    
     return PartialView("_results", vessels); 
    } 

部分図 私は私が使用して部分図のような結果を返すターゲットIDを更新するために、AJAXを使用していますので、 '置換'挿入メソッド。

@model IEnumerable<Multiple_Table_Post.Models.vessel> 
@foreach (var item in Model) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.vessel_name) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.vessel_location) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.vessel_mmsi) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.created) 
    </td> 
</tr> 
} 

あなたは、私が代わりに日付ピッカーを入れ始めているが、私は私がそれらの間で検索できるようにC#の書き方を知らないに気づくでしょうとして。私はdatetimeパラメータとしてメソッドに渡していますが、後は​​完全に止まっています。あなたが示されたLINQクエリのいずれかでこれを行うことができ

感謝

+0

に見られるように、また、第二LINQクエリで日付をフィルタすることができます(これらすべての恐ろしいものを追加することができます例:[tag:ajax])をタグとして使用しますか?タイトルは簡単に聞こえるが、それは私のものではない。 – Sinatr

答えて

1

var vessels= (from o in db.vessels 
where (o.created>= date_from && o.created<= date_to) 
select o);//I have not tested this. 

詳細:

C# Linq Where Date Between 2 Dates

他の回答

+1

ありがとう、それは実際にいい、きれいでシンプルです。私はそれを複雑にしました。これは完全に機能します。 – Yanayaya

0
var vessels = (from o in db.vessels 
       where o.vessel_date => date_from 
        && o.vessel_date =< date_to 
        && ( term==null 
          || o.vessel_name.Contains(term) 
          && o.vessel_location.Contains(term) 
          && o.vessel_mmsi.Contains(term)) 
       select o); 
関連する問題