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中不受支持。。还有一天,它的结果是空的谢谢,你帮我节省了很多时间