我有一张记录车辆在访问期间发生情况的表格。对于每次访问,有多行记录表示已经完成的事项。表格如下:
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的hack方法,我希望能够在一个LINQ语句中完成。我需要做什么才能实现这个目标?
min
和max
。如果提供了对一个可能含糊不清的问题的两个答案,那就更好了。 - Jeff