var Now = DateTime.Now; DateTime StartDate = DateTime.Now.AddDays(-30); List UsersAndApps = new List(); var Application = from A in ApplicationInstances where A.Session.User.UserName != null && A.Application.Name != null && (A.StartDate > StartDate) select new {UserName = A.Session.User.UserName, A.Application.Name,A.StartDate,A.EndDate,DGName = A.Session.Machine.DesktopGroup.Name}; foreach(var User in Application.ToList().GroupBy(u=>u.UserName)) { foreach(var App in User.GroupBy(u=>u.Name)) { if(App.ToList().Count >1) { int Duration =0 ; int launch =0; foreach(var app in App) { DateTime EndDate ; if(app.EndDate == null) EndDate = Now; else EndDate = (DateTime)app.EndDate; Duration += (int)((TimeSpan)(EndDate - app.StartDate)).TotalMinutes; launch++; } UsersAndApps.Add(new ApplicationInstance((String)App.ToList()[0].Name,(String)App.ToList()[0].UserName,Duration,launch,App.ToList()[0].DGName)); } else { DateTime EndDate; if(App.ToList()[0].EndDate == null) EndDate = Now; else EndDate = (DateTime)App.ToList()[0].EndDate; UsersAndApps.Add(new ApplicationInstance((String)App.ToList()[0].Name,(String)App.ToList()[0].UserName,(int)((TimeSpan)(EndDate-App.ToList()[0].StartDate)).TotalMinutes,1,App.ToList()[0].DGName)); } } } Console.WriteLine(UsersAndApps.OrderBy(u=>u.UserName).ToList()); } public class ApplicationInstance { public String UserName; public String AppName; public int Duration; public int Launches; public string DeliveryGroup; public ApplicationInstance(String AppName,String UserName,int Duration,int Launches, string DeliveryGroup) { this.AppName = AppName; this.UserName = UserName; this.Duration = Duration; this.Launches = Launches; this.DeliveryGroup = DeliveryGroup; }