私は、訪問中に何が起こったかを記録したテーブルを持っています。訪問ごとに、何が行われたのかを示す複数の行があります。テーブルは次のようになります。異なる行の異なる列の差を計算する
VisitID | ActionID | StartTime | EndTime
0 | 0 | 1/1/2013 | 1/2/2013
1 | 0 | 1/2/2013 | 1/4/2013
1 | 1 | 1/4/2013 | 1/7/2013
2 | 0 | 1/4/2013 | 1/5/2013
2 | 1 | 1/5/2013 | 1/6/2013
2 | 2 | 1/6/2013 | 1/7/2013
訪問にかかる時間を取得できるLINQクエリを作成したいと考えています。 TotalTime
は、最初と最後(最低と最高)のActionID
を見つけて次にlast.EndTime - first.StartTime
を見つけることによって計算されます。期待される結果:
VisitID | TotalTime
0 | 1
1 | 5
2 | 3
私は、私は本当に私が最後たActionを取得するために使用ハックを好きではない、と私は本当にできるようにしたいと思い
var first = db.Visits.Where(v => v.ActionID == 0)
var last = db.Visits.GroupBy(x => x.VisitID).Select(g => g.OrderByDescending(x => x.ActionID).First())
first.Join(last, f => f.VisitID, l => l.VisitID, (f, l) new{ VisitID = Key, TotalTime = l.EndTime - f.StartTime});
を行うことによって、私の期待通りの結果を生成することができます1 LINQステートメント内でこれを行います。これを達成するために私は何をする必要がありますか?
私は、これは動作するはずだと思う
+1また、私は彼がトータルデートを望んでいると思っています、全タイムスパンではありません。 –
@lazyberezovskyいいキャッチです。私は日数を返す答えを更新しました。しかし、EFクエリのように見えるので、このクエリがEntity Frameworkで動作するかどうかはわかりません。 –
もちろん! VisitIDでグループ化し、 'min'と' max'を使用します。ブロッキーは、おそらくあいまいな質問に両方の答えを提供することを指摘する – Jeff