C# 比较实体框架中的日期时间
我正在尝试执行此操作,但它不起作用,它返回空结果:C# 比较实体框架中的日期时间,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我正在尝试执行此操作,但它不起作用,它返回空结果: if (inputDate != null) { dataContext.myTable .Where(r => r.myDate.HasValue && r.myDate.Value.Day == inputDate.Value.Day) } 我想比较两个可为空的DateTime值,我只想从数据库中检索属于某个日期的Da
if (inputDate != null)
{
dataContext.myTable
.Where(r => r.myDate.HasValue &&
r.myDate.Value.Day == inputDate.Value.Day)
}
我想比较两个可为空的DateTime值,我只想从数据库中检索属于某个日期的DateTime值。为了简化这个问题,我首先尝试只比较它们的日值
请不要标记为重复,我正在使用EF5,因此我没有DbFunctions.TruncateTime函数。正如您所说,实体框架将抛出错误。最好的选择是使用条件介于一天的第一秒和最后一秒之间的查询
if(inputDate != null)
{
/* Assuming inputDate.Value only contains the Date part.
i.e. : 2017-05-23 instead of 2017-05-23 10:00:32 */
DateTime inputDateFirstSecond = inputDate.Value;
DateTime inputDateLastSecond = inputDateFirstSecond
.AddHours(23)
.AddMinutes(59)
.AddSeconds(59);
dataContext.myTable.Where(r => r.myDate.HasValue &&
(r.myDate.Value >= inputDateFirstSecond && r.myDate.Value <= inputDateLastSecond)
)
}
SQL Server的一些实体框架扩展允许您使用datetime部分,但如果您将来更改数据库引擎,这些扩展将无法工作。您可以使用r.myDate.Date==inputValue.Date。使用Day意味着您将获得匹配项,而不考虑月份。如果不使用它,则会出现一个例外:LINQ to Entities中不支持指定的membre“Date”。事实上,EntityFramework并没有重新确认如何将此代码转换为SQL。请尝试删除r.myDate.HasValue,然后使用r.myDate.Date==inputValue。Date@S.Petrosov只有当myDate列是日期列时,这才有效。如果是DATETIME,则不会。我试图删除HasValue,但仍然无法工作。对于.Date,它给出了一个例外,指定的membre“Date”在LINQ to Entities中不受支持。。还有一天,它的结果是空的谢谢,你帮我节省了很多时间