zoukankan      html  css  js  c++  java
  • LINQ to Entities 不识别方法“System.DateTime AddDays(Double)

    今天本想在linq里按照时间筛选一下超时的数据,一共两个字段FeedBackTime(计划反馈时间)、EndTime(实际反馈时间)。需求是这样的,查找数据库里所有EndTime大于FeedBackTime,且只计算到日,时分秒就不计算了。也就是说 计划时间和实际时间是同一天或实际时间小于计划时间,那么就认为不是超时的。

    开始的时候我使用了下面这种方式:

    query.Where(c =>c.FeedBackTime > c.EndTime.AddDays(1));

    结果报错:

    LINQ to Entities 不识别方法“System.DateTime AddDays(Double) 因此该方法无法转换为存储表达式

    然后换用SqlFunctions. DateDiff 方法:

    返回所指定开始日期和结束日期之间的指定 datepart 边界的计数。

    query.Where( c => SqlFunctions.DateDiff("day", c.FeedBackTime, c.EndTime) < 0);
    解决了。
     
    命名空间:   System.Data.Objects.SqlClient 
    程序集:System.Data.Entity(在 System.Data.Entity.dll 中) 
    

      

    [EdmFunctionAttribute("SqlServer", "DATEDIFF")]
    public static Nullable<int> DateDiff(
        string datePartArg,
        Nullable<DateTime> startDate,
        Nullable<DateTime> endDate
    )
    

      

    参数
    datePartArg 
    类型: System.String
    要计算时间间隔差值的日期部分。 
    
    startDate 
    类型: System.Nullable<DateTime>
    第一个日期。 
    
    endDate 
    类型: System.Nullable<DateTime>
    第二个日期。 
    
    返回值
    类型: System.Nullable<Int32>
    两个日期之间的时间间隔数。
    

      

    无法直接调用此函数。 此函数只能出现在 LINQ to Entities 查询中。
    
    此函数将被转换为数据库中对应的函数。
    

      

  • 相关阅读:
    由类型名得到该类型
    TypeName of CA1505 is AvoidUnmaintainableCode, not AvoidUnmantainableCode.
    多核
    SSRS throws "The operation has timed out."
    XmlRootAttribute与XmlTypeAttribute
    littleendian and bigendian
    Assembly Exp
    如何在Ubuntu 11.10下成功安装Java [转载]
    *uck up ~,纯发泄
    [转载]读书相关,,
  • 原文地址:https://www.cnblogs.com/mantishell/p/10714738.html
Copyright © 2011-2022 走看看