使用Entity Framework按时间戳列选择新记录

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中选择*.它可以工作.永远不会抛出异常.


Ger*_*old 1

您无法使用实体框架执行此操作,因为它不允许>=运算符进行时间戳比较。它只允许=. 你可以做例如

var b = BitConverter.GetBytes(1000000L);
var query = from x in MyTable
            where x.RowId = b; // not >=
Run Code Online (Sandbox Code Playgroud)

但这不会很有用。因此,您必须找到另一种方法来获取新行,例如标识列中的值,或添加“真实”时间戳(日期时间)列。