即使DateTime值相同,Linq查询也不会返回任何内容

时间:2014-07-01 17:38:39

标签: c# linq mongodb datetime

关于日期,我有这个奇怪的问题。我试图使用日期从mongodb获取值。我知道发生了什么事,这就是为什么即使他们有相同的日期,也没有任何回报。这是过程:

我使用ID从数据库中提取数据,现在我得到的记录有一个日期。此日期显示在我的视图中。以下是我的表现方式。

动作:

public JsonResult GetDateSentList(string id)
{
    var data = ApiHelper<List<SomeModel>>.Get("SomeController/SomeAction?id=" + id); //I created a helper for requests
    var distinctData = data.Select(a => a.DateOfEvent).Distinct().ToList();
    foreach (var item in distinctData)
    {
        var dateData = new SomeModel();
        dateData = data.FirstOrDefault(a => a.DateOfEvent == distinctData[i]);
        dateData.DateOfEventString = dateData.DateOfEvent.ToString(@"MM-dd-yyyy hh:mm", new CultureInfo("en-US"));
        dateData.DateOfEventExactString = dateData.DateOfEvent.ToString(@"MM-dd-yyyy hh:mm:ss tt", new CultureInfo("en-US"));

    }
    return Json(listDistinctData);
}

您可以注意到,这是通过ajax调用访问的,并且使用js显示此处的值(日期字符串)。

这里是我此时得到的价值:2014年6月30日上午7:01:17(现在是html值中的字符串)

现在,按下按钮,我在操作上传递相同的日期字符串,此操作会向WebApi执行请求。

在WebApi上,字符串被转换为dateTime(request.DateSent),此时我试图使用我在记录中获得的日期获得与第一部分相同的记录我想要的。

x= someService.All().FirstOrDefault(c => c.DateOfEvent == request.DateSent);

我检查了我想要的记录,它有一个DateTime值6/30/2014 7:01:17 AM和我用来获取我想要的记录具有相同DateTime的DateTime价值6/30/2014 7:01:17 AM可悲的是,我继续得到一个空值。这里发生的事情导致他们不平等,但我根本无法追踪它。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

你必须考虑更多。午夜过了1毫秒,午夜前是1毫秒吗?如果是这样,您应该计算差异并查看它是否小于您选择的某个间隔。如果没有,您应该只比较您感兴趣的字段(年,日,月等)。

你可以建立一个静态的“截断”功能,除了秒和更高的时间之外切断所有内容:dt = dt.AddTicks(-dt.Ticks % 10000000);

在此处找到:Ignore milliseconds when comparing two datetimes

并使用截断日期进行比较。

警惕时区,但这可能不是问题。