gpt4 book ai didi

c# - 使用 linq 分组后查找平均时间和最大时间

转载 作者:太空宇宙 更新时间:2023-11-03 15:00:46 25 4
gpt4 key购买 nike

给定以下类(class):

public class SessionData
{
public Guid Session { get; set; }
public DateTime Date { get; set; }
}

并从中列了一个 list :

public static List<SessionData> GetSessionData()
{
Guid guid1 = Guid.NewGuid();
Guid guid2 = Guid.NewGuid();

List<SessionData> sessionData = new List<SessionData>
{
new SessionData {Session = guid1, Date = DateTime.UtcNow.AddMinutes(3)},
new SessionData {Session = guid1, Date = DateTime.UtcNow.AddMinutes(2)},
new SessionData {Session = guid2, Date = DateTime.UtcNow.AddMinutes(5)},
new SessionData {Session = guid2, Date = DateTime.UtcNow.AddMinutes(4)},
new SessionData {Session = guid1, Date = DateTime.UtcNow.AddMinutes(20)},
new SessionData {Session = guid1, Date = DateTime.UtcNow.AddMinutes(25)},
new SessionData {Session = guid2, Date = DateTime.UtcNow.AddMinutes(20)},
new SessionData {Session = guid1, Date = DateTime.UtcNow.AddMinutes(1)},
};

return sessionData;
}

我想找到 session 的平均持续时间 (1) 和最长的 session (2)。还有每天 (3)、每周 (4)、每月 (5)、每年 (6)、总共 (7) 有多少节课?

我试着从

开始
var list = (from t in sessionData group t.Date by t.Session).ToList();

并尝试找到每个 session 的持续时间(最大日期 - 最小日期)并从那里继续。有没有更好的方法直接使用 Linq 进行这些计算?

最佳答案

var sessionData = GetSessionData();

var longestSession = sessionData
.GroupBy(sd => sd.Session)
.Select(group => new Tuple<Guid, TimeSpan>(group.First().Session, group.Max(sd => sd.Date) - group.Min(sd => sd.Date)))
.OrderBy(tuple => tuple.Item2)
.Last()
.Item1;

var averageDuration = sessionData
.GroupBy(sd => sd.Session)
.Select(group => new Tuple<Guid, TimeSpan>(group.First().Session, group.Max(sd => sd.Date) - group.Min(sd => sd.Date)))
.Average(tuple => tuple.Item2.Minutes);

对于您的其他问题,我没有直接的 LINQ 解决方案,我会在有想法时立即更新。

关于c# - 使用 linq 分组后查找平均时间和最大时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46301771/

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