gpt4 book ai didi

c# - 计算不同行中不同列之间的差异

转载 作者:太空狗 更新时间:2023-10-29 20:31:06 25 4
gpt4 key购买 nike

我有一张表记录了车辆在访问期间发生的情况。对于每次访问,都有多行来表示已完成的操作。表格看起来像这样

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# - 计算不同行中不同列之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15212400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com