您应该能够通过对System.Data.Linq.Binary对象进行比较来执行类似的操作,这些对象表示 .NET 中的 RowVersion/Timestamp 值。
除了,你真的不会比较任何东西。诀窍是编写一个 LINQ 查询,该查询将被翻译成T-SQL
进行实际比较。
通过使用一个带有Compare
2 个Binary
参数的方法,LINQ 会很高兴地生成一些T-SQL
比较数据库中的 rowversion 字段的参数。它不会调用实际的方法。它只是用来使其生成所需的 SQL。
而不是存储最新读取的 rowversion 值,因为Int64
您只是存储它Binary
。
private Binary _latestRowVersion = new Binary(new byte[] { 0 });
private void Read()
{
using (var ctx = new DataContext())
{
var all =
(from c in ctx.Categories
where c.RowVersion.Compare(_latestRowVersion) > 0
select c).ToList();
if (all.Any())
{
_latestRowVersion =
all.OrderByDescending(
p => BitConverter.ToInt64(p.RowVersion.ToArray(), 0))
.First()
.RowVersion;
}
}
}
public static class BinaryComparer
{
public static int Compare(this Binary item1, Binary item2)
{
throw new NotImplementedException();
}
}