[英]Get a delta, using a TimeStamp Column in Linq2SQL
我需要在表上執行delta選擇(僅返回已更改的記錄,因為某個TimeStamp),並且我必須使用TimeStamp列。 在SQL中,這很容易:
@DeltaStamp TIMESTAMP
...
select *
from table
where timestamp > @DeltaStamp
在Linq2SQL中,我可以輕松獲得最大時間戳:
var maxStamp = MyTable
.OrderByDescending(x => x.TimeStamp)
.Take(1)
.FirstOrDefault().TimeStamp;
但是如何執行delta查詢?
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'
干杯。
這在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;
這應該工作,或接近。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.