如何按日期列表搜索

时间:2016-08-31 06:03:49

标签: asp.net-mvc asp.net-mvc-5

我在这个网站上工作,我想从列表中搜索特定酒店的日期 这是我尝试过的事情

在我的控制器上

public ActionResult Index(string searchString)
{

    IEnumerable<HotelAvailability> hotels = db.HotelAvailabilities.Include(c => c.Hotel);

    if (!String.IsNullOrEmpty(searchString))
    {
         hotels = db.HotelAvailabilities.Include(c => c.Hotel).Where(
                    s => s.RoomType.Contains(searchString) 
                        || s.AvailabilityDate.Equals(searchString) 
                        || s.Hotel.HotelName.Contains(searchString));

         return View(hotels);
     }
}

和我的观点

<div class="box-tools pull-right">
    @using (Html.BeginForm("Index", "HotelAvailabilities", FormMethod.Get))
    {
        <div class="input-group" style="width: 150px;">
            <input type="text" name="searchString" class="form-control input-sm pull-right" placeholder="Search">
             <div class="input-group-btn">
                 <button class="btn btn-sm btn-success"><i class="fa fa-search"></i></button>
             </div>
         </div>
       }
</div>

1 个答案:

答案 0 :(得分:0)

关于如何搜索日期的问题:将搜索字符串转换为DateTime

if (!String.IsNullOrEmpty(searchString)) {

    DateTime searchDate;
    if (DateTime.TryParse(searchString, out searchDate)) {
        hotels = db.HotelAvailabilities.Include(c => c.Hotel)
            .Where(h => h.AvailabilityDate == searchDate); 
            // do not use .Equals() which can not be converted to SQL
    }

    return View(hotels);
}

更清晰的解决方案是提供一个额外的控件(返回DateTime的日期选择器),让用户选择搜索日期并处理搜索字词。

关于您在代码示例中显示的搜索:

如果您希望将所有内容都包含在一个搜索字符串中,则必须将其拆分为单独的标记,以用于您显示的查询。

例如,如果用户输入“Hilton 2016-09-01”,您希望将其拆分为“Hilton”和“2016-09-01”,然后使用这些令牌进行搜索。我想这将是另一个问题。