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语句中执行此 *** 作.我需要做些什么来实现这一目标?
解决方法 我觉得这应该有用……var result = db.Visits.GroupBy(v => v.VisitID) .Select(g => new { VisitID = g.Key,TotalTime = g.Max(v => v.EndTime).Subtract(g.Min(v => v.StartTime)).Days });
编辑:这假设actionID与最大和最小开始日期无关.这是一个不同的解决方案,其中actionID是有序的,第一次和最后一次访问用于计算时差.
var result2 = db.Visits.GroupBy(v => v.VisitID) .Select(g => new { VisitID = g.Key,TotalTime = g.OrderBy(v => v.ActionID).Last().EndTime.Subtract(g.OrderBy(v => v.ActionID).First().StartTime).Days });总结
以上是内存溢出为你收集整理的c# – 计算不同行中不同列之间的差异全部内容,希望文章能够帮你解决c# – 计算不同行中不同列之间的差异所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)