1

我需要对表执行增量选择(仅返回自某个 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'

干杯。

4

1 回答 1

3

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

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;

这应该有效,或者接近。

于 2012-05-09T11:09:54.710 回答