无法比较LINQ中的两个日期

时间:2016-10-11 11:01:05

标签: c# linq asp.net-mvc-4

我正在努力比较MVC中的日期。我尝试了所有的方法,但仍然没有什么进展顺利。似乎很奇怪。

这是我的日期时间文本框,以JQuery日历为界。

@Html.TextBoxFor(x => x.dateofAction, ViewBag.filterdateTime as string, new { @id = "dateofAction", @placeholder = "Date Of Action", @class = "form-control datepicker validate[required, custom[date,future[min]]]", style = "width:80%;height:20px;" })

这是我的模型字段。

public DateTime? dateofAction { get; set; }

最后这是我的查询

upld_id = (from c in db.ts_upld_doc where (c.upld_ModifiedDateTime).Value.Year == datemodified.Year select c.upld_docid).ToArray();

我点击断点并检查。我发现价值如下。

  • 11/10/2016 12:00:00 AM - 用户提供的日期
  • 2016-10-11 13:52:53.583 - Sql表(upld_ModifiedDateTime)

我试过很多方面,比如只比较日期,日期,月份,年份,但对我来说没什么用。有些专家可以告诉我为什么会遇到这个问题吗?非常感谢你。

4 个答案:

答案 0 :(得分:1)

更改查询以选择当天开始和结束之间的值

DateTime start = datemodified.Date;
DateTime end = start.AddDays(1);

upld_id = (from c in db.ts_upld_doc 
           where c.upld_ModifiedDateTime >= start && c.upld_ModifiedDateTime < end 
           select c.upld_docid).ToArray();

upld_id = db.ts_upld_doc
    .Where(c => where c.upld_ModifiedDateTime >= start && c.upld_ModifiedDateTime < end)
    .Select(c => c.upld_docid);

答案 1 :(得分:0)

首先从upld_ModifiedDateTime中删除时间,然后使用DateTime.Compare方法进行比较,如下所示:

upld_id = (from c in db.ts_upld_doc where
        DateTime.Compare(
            new DateTime(c.upld_ModifiedDateTime.Year, c.upld_ModifiedDateTime.Month, c.upld_ModifiedDateTime.Day))
        ,datemodified) == 0
      select c.upld_docid).ToArray();

答案 2 :(得分:0)

您应该将DbFunctions与EF6一起使用。

var dateValue = datemodified.Date;

var upld_id = (
  from c in db.ts_upld_doc 
  where DbFunctions.TruncateTime(c.upld_ModifiedDateTime) == dateValue 
  select c.upld_docid).ToArray();

如果您使用的是旧版EF,请使用EntityFunctions

var dateValue = datemodified.Date;

var upld_id = (
  from c in db.ts_upld_doc 
  where EntityFunctions.TruncateTime(c.upld_ModifiedDateTime) == dateValue 
  select c.upld_docid).ToArray();

答案 3 :(得分:0)

datemodified在哪里宣布,它是如何得到它的价值的? 如果通过Controller中的Action方法声明并设置datemodified,则您选择的参数名称可能是问题。

所以这不起作用:

// MVC ignores Form field 'dateofAction' because it expects 'datemodified'.
[HttpPost]
ActionResult Index(DateTime datemodified) { ... }

这应该有效:

// MVC uses Form field 'dateofAction' to set parameter 'dateofAction'.
[HttpPost]
ActionResult Index(DateTime dateofAction) { ... }