- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道已经有很多关于这个问题的帖子,但我似乎找不到解决方案。
这是我的 Ling to Entities 查询:
IEnumerable<Tblstamp> changes = (from c in userGSN.edb.Tblstamp
where (c.Ts_Date >= userGSN.DateLastCheck &&
TimeSpan.Parse(c.Ts_Time) >= userGSN.TimeLastCheck)
orderby c.Ts_Id ascending
select c);
我想将 c.Ts_time
与 userGSN.TimeLastCheck
进行比较,但为此我必须将 c.Ts_Time
转换为时间跨度(它是一个字符串,来 self 无法修改的数据库,尝试了一切)。我也无法在查询之前在其他变量中进行转换,因为我无法在查询之外访问它。
显然,我在查询中尝试使用 TimeSpan.Parse 方法时遇到错误,但我找不到任何解决方法。我曾尝试使用 LINQ to Object,但由于我真的不习惯它,所以我无法进行与此处相同的查询。
我知道这个问题,我只是想找到一个解决方法,需要一些帮助!
编辑:所以我按照建议尝试了 DateDiff
函数:
IEnumerable<Tblstamp> changes = (from c in userGSN.edb.Tblstamp
where (c.Ts_Date >= userGSN.DateLastCheck && SqlFunctions.DateDiff("second",userGSN.TimeLastCheck,c.Ts_Time).Value > 0 )
orderby c.Ts_Id ascending
select c
);
但它给了我同样的错误:"LINQ to Entities does not recognize the method 'System.Nullable
1[System.Int32] DateDiff(System.String, System.Nullable1 [System.TimeSpan], System.String)' 方法,并且此方法无法转换为存储表达式。"
尽管上面清楚地写着 here “您不能直接调用此函数。此函数只能出现在 LINQ to Entities 查询中。”,这正是我正在做的?!
最佳答案
没有干净的方法可以做到这一点,因此您必须跳出框框思考。尝试使用 SqlFunctions.DateDiff
执行检查。您需要根据自己的使用情况对其进行调整,但是:
SqlFunctions.DateDiff("second", c.Ts_Time, userGSN.TimeLastCheck.ToString()) > 0
有other methods如果 DateDiff
不合适,您可以使用。参见 EntityFunctions
根据您用来查询数据的内容,您可能需要 System.Data.Entity.SqlServer.SqlFunctions
相反。
关于c# - LINQ 到实体 : cannot call a method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28737195/
我是一名优秀的程序员,十分优秀!