如何使用c#在两个日期之间进行搜索

时间:2016-08-03 14:56:29

标签: c#

我在我的MVC应用程序中创建了一个非常简单的搜索表单,允许用户搜索字符串术语并返回结果。我想让我的用户在两个日期之间进行搜索,但我不确定我是如何编程的。

到目前为止,这是我的代码。正如您所注意到的,这仅用于搜索作为参数传递给控制器​​的字符串。我已经开始编写日期选择器的代码,但我已经卡住了。

查看

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

部分视图 由于我使用ajax更新目标ID,因此我会使用&#39;替换&#39;在部分视图中返回结果。插入方法。

@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#以允许我在它们之间进行搜索。我将它们作为日期时间参数传递给方法,但之后我完全陷入困境。

非常感谢

2 个答案:

答案 0 :(得分:1)

您可以在已显示的任一LINQ查询中执行此操作。

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

您还可以在第二个LINQ查询中过滤日期,如其他答案所示

答案 1 :(得分: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);