LINQ to Entities 4:在where子句中使用计算进行查询

时间:2010-10-08 07:08:16

标签: entity-framework linq-to-entities

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

是一个明智的选择
select * from Schema.TableName mp
where (GetDate() - mp.[Timestamp]) > mp.Timeout

但是,使用LINQ语法或Lambda的Entity Framework我不能这样做,因为看起来Lambda输入变量(mp)不能仅作为谓词的一部分用作计算的一部分,所以这不会编译:< / p>

var records = context.TableName.Where(mp => (DateTime.Now - mp.TimeStamp) > mp.Timeout);

这不会编译。

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

1 个答案:

答案 0 :(得分:4)

这不会编译,因为您要将返回类型为(DateTime.Now - mp.TimeStamp)的{​​{1}}与System.TimeSpan进行比较。想到的第一个解决方案就是

int

不幸的是,这似乎不适用于EF,所以如果你有MS SQL Server作为数据库,你可以在EF4中使用Where(mp => (DateTime.Now - mp.TimeStamp) > new TimeSpan(0, 0, 0, mp.Timeout))

SqlFunctions

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