我有一个带有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。我有什么选择?
答案 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