2012-05-15 98 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))