Linq-To-Entities和查询日期

时间:2013-06-12 12:50:27

标签: c# datetime asp.net-mvc-4 linq-to-entities fullcalendar

我正在使用Fullcalendar jquery插件在我的MVC 4应用程序中的日历视图上显示事件。

我已经配置了正确调用我的控制器操作的插件,传递了两个双参数,这两个参数表示当前视图中以unix时间戳格式显示的开始日期和结束日期。

在这里你可以看到我的控制器动作方法

[HttpPost]
public ActionResult GetEvents( double start, double end ) {
    DateTime dtStart = DateTimeUtils.UnixTimeStampToDateTime( start );
    DateTime dtEnd = DateTimeUtils.UnixTimeStampToDateTime( end );

    IPolicyRepository _pRepo = _uow.PolicyRepository;
    IEnumerable<Policy> model = 
    _pRepo.Find( p => p.EndDate >= dtStart.Date && p.EndDate < dtEnd.Date );

    ...
}

方法DateTimeUtils.UnixTimeStampToDateTime(double)以下列方式转换日期时间对象中的unix时间戳

public static DateTime UnixTimeStampToDateTime( double unixTimeStamp ) {
    // Unix timestamp is seconds past epoch
    DateTime dtDateTime = new DateTime( 1970, 1, 1, 0, 0, 0, 0 );
    dtDateTime = dtDateTime.AddSeconds( unixTimeStamp ).ToLocalTime();
    return dtDateTime;
}

然而,即使某些行存在,存储库的Find方法(即将简单地将lambda传递给EF)也不会返回任何行。 我怀疑这个问题可能是由于我在浏览器和数据库服务器之间存在的不同格式和/或区域设置。

如何解决此问题并创建一个能够了解所使用的区域设置和特定格式的查询?

修改: 有关更多信息,我在这里添加模型定义

public partial class Policy
{
    public int PolicyID { get; set; }

    [...]

    [Required]
    [DisplayName( "Begin date" )]
    [DisplayFormat( ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}" )]
    public DateTime BeginDate { get; set; }

    [Required]
    [DisplayName( "Due Date" )]
    [DisplayFormat( ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}" )]
    public DateTime EndDate { get; set; }
}

1 个答案:

答案 0 :(得分:0)

我找到了问题。

模型类上存在属性DisplayFormat导致了问题

[DisplayFormat( ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}" )]

简单地删除它,它的工作完美!