我正在尝试在脚手架索引视图上运行一个非常简单的搜索。通常这适用于我,但使用日期我无法让它工作。
我的控制器中的代码是:
public ActionResult Index(DateTime SearchDate)
{
var query = from a in db.AppointmentProcedures
where a.BookingStatus == false
orderby a.AppointmentStartTime
select a;
if (SearchDate != null)
{
query = from a in db.AppointmentProcedures
orderby a.AppointmentDate
where a.AppointmentDate == SearchDate
select a;
}
return View(query);
}
但是我遇到了转换问题。在视图中我只有一个简单的日期时间选择器。
答案 0 :(得分:1)
您的AppointmentDate
类型是否为日期?
如果是,则无需将SearchDate
转换为string
答案 1 :(得分:1)
如果可以为null
。或者换句话说,用户没有指定值和控件允许null
。那么你希望你的参数看起来像这样:
DateTime? SearchDate
这将允许您这样做:
if (SearchDate.HasValue)
并进一步将您的查询更改为:
query = from a in db.AppointmentProcedures
orderby a.AppointmentDate
where a.AppointmentDate == SearchDate.Value
select a;
如果不能为null
。然后是,请检查MinValue
:
if (SearchDate != DateTime.MinValue)
答案 2 :(得分:1)
DateTime是一个结构,不能为null。如果MVC无法绑定它,它将使用等于default(DateTime)
的{{1}}。
DateTime.MinValue是0001年1月1日,但是Sql DateTime的最小值是1753年1月1日。如果您尝试在查询中使用DateTime.MinValue,则会出错。
要解决此问题,您可以使用Nullable DateTime。代码中的更改如下所示:
DateTime.MinValue
答案 3 :(得分:0)
将日期作为字符串存储在数据库
之前进行转化:
var converted = Convert.ToString(SearchDate); query = from a in db.AppointmentProcedures orderby a.AppointmentDate where a.AppointmentDate == converted select a;
因为它无法识别Convert.ToString()函数(将尝试将其解释为SQL函数)。