-1

我正在尝试在脚手架索引视图上运行一个非常简单的搜索。通常这对我有用,但使用日期我无法让它工作。

我的控制器中的代码是:

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

但是我遇到了转换问题。在视图中,我只有一个简单的日期时间选择器。

4

4 回答 4

1

你的AppointmentDate类型是日期吗?

如果是,则无需转换SearchDatestring

于 2013-10-08T12:29:04.187 回答
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)
于 2013-10-08T12:37:14.037 回答
1

DateTime 是一个结构,不能为空。如果 MVC 不能绑定它,它将使用default(DateTime)which is equal to DateTime.MinValue

DateTime.MinValue 是 0001 年 1 月 1 日,但 Sql DateTime 的最小值是 1753 年 1 月 1 日。如果您尝试在查询中使用 DateTime.MinValue,它会给您一个错误。

要解决此问题,您可以使用 Nullable DateTime。您的代码中的更改如下所示:

public ActionResult Index(DateTime? SearchDate)
{
    var query = ...;

    if (SearchDate != null)
    {
         query = ...;
    }

    return View(query);
}
于 2013-10-08T12:38:12.367 回答
0
  1. 将日期作为字符串存储在数据库中是很奇怪的

  2. 在喜欢之前进行转换:

var 转换 = Convert.ToString(SearchDate);
查询 = 来自 db.AppointmentProcedures 中的
orderby a.AppointmentDate
其中 a.AppointmentDate == 已转换
选择一个;

因为它无法识别 Convert.ToString() 函数(将尝试解释为 SQL 函数)。

于 2013-10-08T12:30:44.443 回答