比较实体框架中的DateTimes

时间:2017-05-23 16:09:15

标签: c# entity-framework entity-framework-5

我正在尝试这样做,但它不起作用,它返回空结果:

if (inputDate != null)
{
     dataContext.myTable
                .Where(r => r.myDate.HasValue && 
                            r.myDate.Value.Day == inputDate.Value.Day)
}

我想比较两个可空的DateTime值,我想从数据库中仅检索属于某个DateTime的{​​{1}}值。为了简化这个问题,我首先尝试仅比较它们的Date值。

请不要标记为重复,我正在使用 EF5 ,因此我没有Day功能。

1 个答案:

答案 0 :(得分:1)

正如您所说,实体框架会抛出错误。您拥有的最佳选择是使用条件在当天的第一秒和当天的最后一秒之间的条件。

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的实体框架扩展可以让您使用日期时间部分,但如果您将来更改数据库引擎它们将不起作用。