gpt4 book ai didi

entity-framework - LINQ 到实体 4 : Query with calculation in where clause

转载 作者:行者123 更新时间:2023-12-04 07:24:51 24 4
gpt4 key购买 nike

我有一个带有 DateTime“TimeStamp”列和一个 int“TimeoutSeconds”列的表。我想从这个表中检索所有记录,其中 DateTime.Now - TimeStamp > TimeoutSeconds。在存储过程中,使用 GetDate() 很容易:

select * from Schema.TableName mp
where (GetDate() - mp.[Timestamp]) > mp.Timeout

但是,对于使用 LINQ 语法或 Lambda 的 Entity Framework ,我无法执行此操作,因为 Lambda 输入变量 (mp) 似乎不能仅作为谓词的一部分用作计算的一部分,因此无法编译:
var records = context.TableName.Where(mp => (DateTime.Now - mp.TimeStamp) > mp.Timeout);

这不编译。

我不想检索整个表,然后在内存中进行过滤,也不想使用存储过程或实体 SQL。我在这里有哪些选择?

最佳答案

这不会编译,因为您正在比较 (DateTime.Now - mp.TimeStamp)具有返回类型 System.TimeSpanint .想到的第一个解决方案是做

Where(mp => (DateTime.Now - mp.TimeStamp) > new TimeSpan(0, 0, 0, mp.Timeout))

不幸的是,这在 EF 中似乎不起作用,因此如果您将 MS SQL Server 作为数据库,则可以使用 SqlFunctions在 EF4 中:
var records = context.
TableName.
Where(mp => System.Data.Objects.SqlClient.SqlFunctions.
DateDiff("s", mp.TimeStamp, DateTime.Now) > mp.Timeout);

http://msdn.microsoft.com/en-us/library/dd487052.aspx

关于entity-framework - LINQ 到实体 4 : Query with calculation in where clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3888378/

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