使用Linq2SQL中的TimeStamp列获取增量

时间:2012-05-09 11:05:32

标签: c# sql linq-to-sql

我需要在表上执行delta选择(仅返回已更改的记录,因为某个TimeStamp),并且我必须使用TimeStamp列。在SQL中,这很简单:

@DeltaStamp TIMESTAMP

...

select *
from table
where timestamp > @DeltaStamp

在Linq2SQL中,我可以轻松获得最大时间戳:

var maxStamp = MyTable
.OrderByDescending(x => x.TimeStamp)
.Take(1)
.FirstOrDefault().TimeStamp;

但是如何执行增量查询?

var newRecords = MyTable
.Where(x => x.TimeStamp > maxStamp);

这不能编译:

Operator '>' cannot be applied to operands of type 
'System.Data.Linq.Binary' and 'System.Data.Linq.Binary'

干杯。

1 个答案:

答案 0 :(得分:3)

这在L2S中是不可能的。 SQL Timestamp列不是dateTime列。它是二进制文件,L2S将其视为二进制文件。因此,你无法做你想做的事,至少不是“开箱即用”。您可以按如下方式创建自己的Comparer:

public static class BinaryComparer
{
 public static int Compare(this Binary v1, Binary v2)
 {
 throw new NotImplementedException();
 }
}

var result = from row in MyTable
             where BinaryComparer.Compare(row.TimeStamp, SomeTarget) > 0
             select row;

这应该有效,或者接近。