2012-05-15 94 views
0

我想創建一個強類型的模型和視圖。這部分代碼應該返回以聯繫我們表單發送的「電子郵件」列表。比較DateTime與ASP.NET MVC和SQL Server

我想返回今天發送的所有表單提交。 SQL Server 2008數據類型是datetime。所以我在我的模型中有一個DateTime字段。

public ActionResult ResultTable() 
{ 
    CombinedReport report = new CombinedReport(); 

    report.emails = report.db.ContactEmails.Where(w => w.FormInserted.Equals(DateTime.Today)).ToList(); 
    return PartialView(report); 
} 

當我運行這個配置爲本地內置SQL Server CE,它工作正常。

當我爲運行SQL Server 2008的實際數據庫設置它時,它不起作用。

隨着一些試驗和錯誤,並在我的程序的其他部分查看代碼,我注意到DateTime的C#實現包括12:00:00AM作爲日期的一部分,並且當它與SQL進行比較時,它發送準確的時間。

它不會讓我比較一個DateTime一個字符串,所以我甚至不能格式化「今天」作爲一個字符串。

我在這裏實例化的CombinedReport模型只是特定頁面的視圖模型,並不直接映射到數據庫(「ContactEmails」)。

向前走的最佳方式是什麼讓我保持強烈的視圖和模型?

+0

看看使用Convert.ToDateTime讓您的字符串日期+字符串時間到一個日期時間 – Limey

回答

1

如果你只是想比較值的日期一部分,你應該做的是明確的:

DateTime today = DateTime.Today; 
report.emails = report.db.ContactEmails 
         .Where(w => w.FormInserted.Date == today) 
         .ToList(); 

現在無論你是使用LINQ的味道支持Date屬性是不同的事 - 但這就是我想嘗試的開始。

+0

我使用任何默認LINQ實現與VS2008和MVC3。它似乎不支持Date屬性 – coreno

+0

@coreno:我不認爲有任何「默認的LINQ實現」這樣的事情 - 你應該知道你使用的是LINQ to SQL還是實體框架。 –

1

如果使用的是EF,使用EntityFunctions.TruncateTime方法:

.Where(w => EntityFunctions.TruncateTime(w.FormInserted).Equals(DateTime.Today))