【发布时间】:2015-09-23 06:11:02
【问题描述】:
我有数据库表,它有一个字段调用 CreatedDate 这是日期时间格式。
例如:在该字段中的值保存为 2015-08-27 13:28:50.333 或 NULL
我写了以下 Linq 查询以通过 type、category、country、subsidary 和 date 进行搜索。 type、category、country、subsidary 字段为 nvarchar 字段,日期为 DateTime 字段
[HttpGet]
public JsonResult FetchProducts(string type, string category, string country, string subsidary, string dateHERE)
{
DateTime? mydate = null;
DateTime date2;
bool check = DateTime.TryParse(dateHERE, out date2);
if (check)
{
mydate = date2;
}
................
if (!string.IsNullOrWhiteSpace(type))
products = products.Where(p => p.ProductType_ID.StartsWith(type));
....................
if (check)
{
products = products.Where(p => p.CreatedDate.Equals(mydate)).ToList();
}
...............
return Json(data, JsonRequestBehavior.AllowGet);
}
一旦我输入日期并搜索,我就会得到空值
此查询适用于除 date 之外的几乎所有字段。什么是正确的 linq 查询来搜索日期。
【问题讨论】:
-
步骤 1. 将您的参数更改为
DateTime dateHERE并删除您解析它的代码。 -
您的日期以毫秒为单位存储,因此您不太可能使用
.Equals()找到完全匹配的日期。 -
@StephenMuecke 我将参数更改为
DateTime? dateHERE,将linq 查询更改为if (dateHERE.HasValue) products = products.Where(p => p.CreatedDate.Equals(dateHERE)).ToList();,但结果相同 -
正如我之前提到的,您的
dateHERE值不太可能将现有记录之一匹配到最接近的毫秒。最好的猜测是你想要.Where(p => p.CreatedDate > d1 && p.CreatedDate < d2)d1 = dateHERE.Date()和d2 = d1.AddDays(1) -
在这种情况下,将其设为
.Where(p => p.CreatedDate >= d1 && p.CreatedDate < d2)- 请注意>= d1- 因此它包含带有2015-08-27 00:00:00.000的日期。 @GertArnold 已经给出了答案,所以你可以接受
标签: c# json asp.net-mvc linq datetime