【发布时间】:2013-04-24 15:53:57
【问题描述】:
伙计们,我在实体框架和日期时间方面有一个大问题。问题来了:
首先是实体:
当用户提交表单时,这些值将根据用户输入的参数创建用于条件查询。示例:
var query = from user in UserTable
select user;
if(Request.Form["Category"])
{
query = query.where(add=>add.Category == Request.Form["Category"])
}
//and here the between
if(Request.Form["start_date"] && Request.Form["end_date"])
{
query = query.where(add=>add.Date < Request.Form["start_date"] && add.Date > Request.Form["end_date"] )//equivalent to between
}
until...
return query.ToList();
很好,但问题仍然存在,当用户想要按日期搜索时,将请求表单转换为日期时间时,格式与输入的格式不同:
User'input
2003-12-02
Convert.ToDateTime
result : 02/11/2003(not iqual to the user input)
所以,这不是巧合(嗯,这就是我的客人,因为我读到那个实体自己解决了这个问题)。而且我不能将日期属性设置为字符串,因为我不能在字符串之间使用。
这里的模型简化了:
public string Category {get;set;}
public DateTime Date{get;set;}
但这还不是全部
第 2 部分
我尝试以02/11/2003 格式进行查询,以查看查询是否有效并且正确,但是当我尝试使用2003-12-02 时,结果如下
02/12/2003 format
16330 rows
2003-12-02 format
136 rows
请注意,它们相同,但返回的结果不同。此外,当我检查结果时,我注意到在02/12/2003 format 中查询时,结果包括日期更小或更高:
例子:
Select date FROM Table WHERE date BETWEEN 02/12/2003 AND 03/12/2003
results include: 05/12/2003,30/12/2003
为什么这两个查询之间存在如此显着的差异?
【问题讨论】:
-
不是一个真正的答案,但是当您使用
02/12/2003时,这将转换为 2003 年 2 月 12 日,2003-12-02转换为 2003 年 12 月 2 日。所以它与您的日期文化有关。 -
赞成,您回答了我的一个问题:D。
标签: c# sql sql-server entity-framework asp.net-mvc-4