2017-09-19 58 views
2

考慮下面的類後:查找平均和最大時間與LINQ分組

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

,並提出了名單出來的:

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; 
} 

我想找到會話的平均持續時間(1 )和最長的會話(2)。每天(3),周(4),月(5),年(6),總計(7)有多少次會話?

我試圖從

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

啓動並試圖找到時間(最長日期 - 分鐘日期)每個會話,並從那裏繼續。有沒有更好的方法直接用Linq做這些計算?

+0

你在_「平均會話時間」下的含義_?像數字一樣,你有什麼和你期望得到什麼? – SeM

+0

如何確定會話持續時間?你需要一個開始和結束時間 – Nkosi

+0

@Nkosi我問了同樣的問題,但我的猜測是每個會話都有一個起點,最後是列表中的下一個會話開始時,但列表沒有排序。 .yet –

回答

0
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的解決方案,我會盡快,因爲我有一個想法更新。

+0

似乎已經爲這些工作。是否也可以通過...'方式在sessionData組的'from s中寫入這些內容? – XIII

+1

對不起,但無法幫助您查詢表達式的語法...並且查詢表達式也有一些限制,所以我不確定是否有可能使用這些... –

+1

將此標記爲答案爲它已經給了我如何採取另一種方式實現我的目標的第一個跡象。 – XIII