gpt4 book ai didi

c# - LINQ 到实体 : cannot call a method

转载 作者:太空宇宙 更新时间:2023-11-03 15:44:33 25 4
gpt4 key购买 nike

我知道已经有很多关于这个问题的帖子,但我似乎找不到解决方案。

这是我的 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_timeuserGSN.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.Nullable1[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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com