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 はバイナリとして扱います。したがって、少なくとも「箱から出して」ではなく、やりたいことを行うことができません。次のように独自の 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;

これはうまくいくか、近いはずです。

于 2012-05-09T11:09:54.710 に答える