在我的数据库中,日期像日期时间一样存储,但是当我想执行搜索/过滤时,我希望它仅基于日期而忽略确切时间。我花了很多时间弄清楚如何去做,最后我自己找到了一个可行的解决方案:
string val = rule.Data;
if (!string.IsNullOrEmpty(val))
{
switch (rule.Field)
{
case "Date": {
DateTime parsedDate = DateTime.ParseExact(
val,
"dd/MM/yyyy",
CultureInfo.InvariantCulture);
var pYear = parsedDate.Year;
var pMonth = parsedDate.Month;
var pDay = parsedDate.Day;
rows = rows.Where(o => o.Date >= parsedDate && o.Date <= new DateTime(pYear, pMonth, pDay, 12, 59, 40)); break;
}
}
}
这工作正常。它需要一点改变,但我想我可以使用上面的代码。但是今天我的一所大学给了我一个解决方案,它来自以前在这里开发的项目,这个解决方案要短得多,如果可能的话,我更愿意使用它。它看起来像这样:
string val = rule.Data;
if (!string.IsNullOrEmpty(val))
{
switch (rule.Field)
{
case "Date": { rows = rows.Where(o => o.Date.ToString("dd/MM/yyyy") == val); break; }
}
}
当我尝试这个时,代码不会中断,但它也不会过滤数据。我总是得到空的结果。我想这o.Date.ToString("dd/MM/yyyy")
就是问题所在。我不知道ToString()
这样用于 DateTime 对象是否可以。在我使用的示例中,我ToString()
还获得了一种格式类型,就像我在这里提供的那样ToString("dd/MM/yyyy")
——但在我的情况下ToString()
,它并没有在任何地方重载。这是操作 DateTime 对象的标准方法,还是我找不到ToStrin()
预定义的位置。最后,您能否为我提供一个基于上述代码的工作示例。