1

テーブルの行をそれ自体と比較する単純な LINQ クエリを作成していました。簡単に言えば、フォームには 2 つのデータグリッドがあり、最初のグリッドにはいくつかの行が表示され、次の条件で最初のグリッドで行が選択されるたびに 2 番目のグリッドに入力されます。

選択したものと同じコードを持ち、受信時間の差が 30 秒未満の行を見つけます (つまり、2 番目のグリッドに表示されている行の受信時間は、選択した行の受信時間よりも早くなければなりません)。

私は次のコードを書きました:

Call_Log selected = (Call_Log)dataGrid1.SelectedItem;
                var subData = from cLog in callLog
                              where cLog.Check_Create == 1 &&
                              EntityFunctions.DiffSeconds(selected.ReceptionTime,cLog.ReceptionTime) < 30 &&
                              selected.CustomerCode == cLog.CustomerCode &&
                              selected.CalledID == cLog.CalledID &&
                              selected.ID != cLog.ID
                              select cLog;

ただし、選択した行と30秒以上異なる行が返されます。どうすればこれを修正できますか?

コメント:

上記のコードでは、選択した行との差が 30 秒未満の行 (cLog) が必要です。

ありがとう

4

2 に答える 2

3

DiffSeconds30秒を超える負の値を返す場合、検証はtrueを返します。

Math.absとして取った後に比較してみてください

Math.Abs(EntityFunctions.DiffSeconds(selected.ReceptionTime,cLog.ReceptionTime)‌​) < 30
于 2012-06-17T05:23:14.367 に答える
0

これを試して。

var subData = from cLog in callLog 
              let diffInTicks = selected.ReceptionTime.Ticks - cLog.ReceptionTime.Ticks
              let thirtySecTicks = new TimeSpan(0, 0, 0, 30, 0).Ticks
              where cLog.Check_Create == 1 && 
                diffInTicks < thirtySecTicks && 
                selected.CustomerCode == cLog.CustomerCode && 
                selected.CalledID == cLog.CalledID && 
                selected.ID != cLog.ID 
              select cLog;
于 2012-06-17T06:08:13.267 に答える