我有一张表格,记录了车辆在访问期间发生的情况。对于每次访问,都有多行表示已完成的操作。桌子看起来像这样
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,我真的很希望能够在 1 个 LINQ 语句中做到这一点。我需要做什么才能实现这一目标?