我需要在表上执行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'
干杯。
答案 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;
这应该有效,或者接近。