訪問中に車両に何が起こるかを記録したテーブルがあります。訪問ごとに、何が行われたかを示す複数の行があります。テーブルはこんな感じ
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
私はすることによって私の期待される結果を生み出すことができます
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});
最後のActionIDを取得するために使用したハックは本当に好きではありません。また、1つのLINQステートメント内でこれを実行できるようにしたいと考えています。これを達成するために何をする必要がありますか?