我在我的SQL Server数据库中有一个带有时间戳列(RowId
)的表。
我想根据这个时间戳查询新行。 SQL查询如下:
SELECT *
FROM [MyTable]
where RowId>=0x0000000000A99B06
0x0000000000A99B06
是上一个查询的最大时间戳值。
如何在使用Entity Framework数据库优先的情况下进行此类查询?RowId
映射到 byte[]
属性,我不知道如何在LINQ查询中比较字节数组。
我在我的SQL Server数据库中有一个带有时间戳列(RowId
)的表。
我想根据这个时间戳查询新行。 SQL查询如下:
SELECT *
FROM [MyTable]
where RowId>=0x0000000000A99B06
0x0000000000A99B06
是上一个查询的最大时间戳值。
如何在使用Entity Framework数据库优先的情况下进行此类查询?RowId
映射到 byte[]
属性,我不知道如何在LINQ查询中比较字节数组。
实际上,你可以进行一些小的技巧。这对我有百分之百的效果。
internal static class EntityFrameworkHelper
{
public static int Compare(this byte[] b1, byte[] b2)
{
throw new NotImplementedException();
}
}
然后你就可以像这样使用它:
public void SomeMethod()
{
var messages = Set<Message>().Where(m => m.Modified.Compare(filter.TimeStamp) > 0).ToList();
}
它最终会生成类似这样的SQL语法:"Select * from Messages Where Modified > @param"。它是有效的,也不会抛出异常。long timeStamp = 100500;
IEnumerable<MyTable> result = context.Database.SqlQuery<MyTable>(String.Format("SELECT * FROM MyTable WHERE ROWID>{0} ORDER BY RowId ASC", timeStamp));
var b = BitConverter.GetBytes(1000000L);
var query = from x in MyTable
where x.RowId = b; // not >=
但那样并不是很有用。所以你需要找到另一种方式来获取新行,例如使用自增列的值,或添加一个“真正”的时间戳(datetime)列。