Sir*_*lly 4 .net sql sql-server timestamp entity-framework
RowId
我的SQL Server数据库中有一个带有timestamp column()的表.
我想根据此时间戳查询新行.SQL查询如下
SELECT *
FROM [MyTable]
where RowId>=0x0000000000A99B06
Run Code Online (Sandbox Code Playgroud)
0x0000000000A99B06
是上一个查询的最大时间戳值.
如何使用Entity Framework数据库优先进行此类查询?RowId
映射到byte[]
属性,我不知道如何比较LINQ查询中的字节数组.
Boo*_*ius 16
其实你可以做小黑客.它适合我100%
internal static class EntityFrameworkHelper
{
public static int Compare(this byte[] b1, byte[] b2)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
之后,您可以像这样使用它:
public void SomeMethod()
{
var messages = Set<Message>().Where(m => m.Modified.Compare(filter.TimeStamp) > 0).ToList();
}
Run Code Online (Sandbox Code Playgroud)
它最终将生成如下SQL语法:"从Message Where Modified> @param中选择*.它可以工作.永远不会抛出异常.
您无法使用实体框架执行此操作,因为它不允许>=
运算符进行时间戳比较。它只允许=
. 你可以做例如
var b = BitConverter.GetBytes(1000000L);
var query = from x in MyTable
where x.RowId = b; // not >=
Run Code Online (Sandbox Code Playgroud)
但这不会很有用。因此,您必须找到另一种方法来获取新行,例如标识列中的值,或添加“真实”时间戳(日期时间)列。