CLR DateTime 对象与 SQL Server DateTime 的比较
CLR DateTime object comparison with SQL Server DateTime
我正在使用 this implementation 对 jqGrid 使用 Entity Framework 进行服务器端搜索。我遇到的问题是,虽然搜索对文本或数字字段工作正常,但使用 DateTime 值搜索不起作用。
问题是我的模型 class 中的 DateTime 对象将对象的字符串表示形式(即格式 2/9/2014 12:00:00 AM
)发送到数据库,但数据库的格式为 2014-09-03 00:00:00:000
.结果总是比较失败。
我无法将 DateTime 属性 更改为字符串,所以我很困惑。结果集通过存储过程(一个简单的 SELECT * FROM [TableName])返回,所以我尝试格式化关联的日期字段并返回它,但它 returns 作为 nvarchar。
有没有人以前遇到过这个问题或者对如何解决这个问题有任何建议?如果有任何帮助,我将不胜感激!
只是为遇到此问题的任何人提供答案。我采取了以下步骤来解决这个问题:
1) 在 JQGrid 支持中进行了以下更改 class:
_formatObjects.Add(parseMethod.Invoke(props[rule.field], new object[] { rule.data }));
到
_formatObjects.Add(parseMethod.Invoke(props[rule.field], new object[] { (parseMethod.ReturnType.FullName == "System.DateTime" && rule.data != "") ? Convert.ToDateTime(rule.data, CultureInfo.CreateSpecificCulture("fr-FR")).ToString() : rule.data }));
2a) 在我的控制器中,每当我直接从 table 中获取时,我都添加了以下代码(您必须明确指定列名以截断时间部分):
//For matching date instead of datetime values
if (wc.Clause.Contains("Date"))
{
wc.Clause = wc.Clause.Replace("DeliveryDate", "DbFunctions.TruncateTime(DeliveryDate)");
}
results = results.Where(wc.Clause, wc.FormatObjects);
2b) 如果数据是从存储过程返回的,我只是从 SP 返回了一个适当的 Date 字段(这种方法仅在时间戳部分全为零时才适用于 DateTime 字段)。
希望这对其他人有帮助。
我正在使用 this implementation 对 jqGrid 使用 Entity Framework 进行服务器端搜索。我遇到的问题是,虽然搜索对文本或数字字段工作正常,但使用 DateTime 值搜索不起作用。
问题是我的模型 class 中的 DateTime 对象将对象的字符串表示形式(即格式 2/9/2014 12:00:00 AM
)发送到数据库,但数据库的格式为 2014-09-03 00:00:00:000
.结果总是比较失败。
我无法将 DateTime 属性 更改为字符串,所以我很困惑。结果集通过存储过程(一个简单的 SELECT * FROM [TableName])返回,所以我尝试格式化关联的日期字段并返回它,但它 returns 作为 nvarchar。
有没有人以前遇到过这个问题或者对如何解决这个问题有任何建议?如果有任何帮助,我将不胜感激!
只是为遇到此问题的任何人提供答案。我采取了以下步骤来解决这个问题:
1) 在 JQGrid 支持中进行了以下更改 class:
_formatObjects.Add(parseMethod.Invoke(props[rule.field], new object[] { rule.data }));
到
_formatObjects.Add(parseMethod.Invoke(props[rule.field], new object[] { (parseMethod.ReturnType.FullName == "System.DateTime" && rule.data != "") ? Convert.ToDateTime(rule.data, CultureInfo.CreateSpecificCulture("fr-FR")).ToString() : rule.data }));
2a) 在我的控制器中,每当我直接从 table 中获取时,我都添加了以下代码(您必须明确指定列名以截断时间部分):
//For matching date instead of datetime values
if (wc.Clause.Contains("Date"))
{
wc.Clause = wc.Clause.Replace("DeliveryDate", "DbFunctions.TruncateTime(DeliveryDate)");
}
results = results.Where(wc.Clause, wc.FormatObjects);
2b) 如果数据是从存储过程返回的,我只是从 SP 返回了一个适当的 Date 字段(这种方法仅在时间戳部分全为零时才适用于 DateTime 字段)。
希望这对其他人有帮助。