之前和之后的日期时间比较

时间:2013-05-27 14:14:11

标签: c# entity-framework sql-server-2005 entity-framework-5 dynamic-linq

我正在使用动态linq为中等复杂的搜索构建where子句,而且我遇到了日期问题。

我希望用户能够过滤“创建日期”,在该日期之前,该日期或该日期之后搜索任何内容。

我发现this answer用于构建动态查询,如下所示:.Year == @0.Year && created.Month == @0.Month && created.Day == @0.Day)"。这适用于搜索完全相同的日期,但在尝试搜索之前或之后的某些内容时不会保留。我得到的最远的是"(created.Year >= @0.Year && created.Month >= @0.Month && created.Day > @0.Day),这对当月以外的任何事情都不起作用(如果我搜索(今天之后),它只会显示结果当天> 27,即使他们是在我搜索的日期后的一个月内。)

我也尝试使用DateTime.Compare,但这不起作用,也没有尝试比较DateTime.Date`。

有什么办法可以直接使用T-SQL来实现这个目的吗?

编辑:"(created.Date == @0.Date)"

enter image description here

1 个答案:

答案 0 :(得分:0)

我最终使用现有代码进行“开启”比较,并且只是在Corak建议之前和之后执行严格的><

if (Comparison == ComparisonType.Equals) {
    return string.Format("({0}.Year {2} @{1}.Year && {0}.Month {2} @{1}.Month && {0}.Day {2} @{1}.Day)", FieldName, index, ComparisonType.Equals.Evaluate()); //workaround for "exactly equals date"
} else if (Comparison == ComparisonType.Less_Than) {
       Value = ((DateTime)Value).Minimize(); //set the time values of the date to the minimums (00:00:00 000)
} else if (Comparison == ComparisonType.Greater_Than) {
       Value = ((DateTime)Value).Maximize(); //set the time values of the date to the maximums (23:59:59 999)
}

return string.Format("({0} {1} @{2})", FieldName, Comparison.Evaluate(), index);