2013-06-12 174 views
0

我正在使用Fullcalendar jquery插件在我的MVC 4應用程序的日曆視圖上顯示事件。Linq-to-Entities和查詢日期

我已經配置了正確調用我的控制器操作的插件,這兩個參數代表在當前視圖中以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)在DateTime對象以下列方式

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; 
} 

轉換Unix時間戳但倉庫的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; } 
} 
+0

假設SQL,可能啓動'Profiler'並查看它發送了什麼? – MisterIsaak

+0

你可以開始以全球化/本地化爲中心頭痛...... http://msdn.microsoft.com/en-us/library/aa292205%28v=vs.71%29.aspx –

+0

@JIsaak:謝謝你的回答。我可以在localdb實例上使用分析器嗎? – Lorenzo

回答

0

我已經找到了問題。

的模型類的屬性DisplayFormat的存在導致了問題

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

簡單地刪除,它的工作完美!