var groupedData = from s in db.Intraday where s.Date >= dateFrom && s.Date <= dateTo group s by new { Year = s.Date.Year, Month = baseUnit >= BaseUnit.Months ? s.Date.Month : 1, Day = baseUnit >= BaseUnit.Weeks ? s.Date.Day : 1, Hour = baseUnit >= BaseUnit.Hours ? s.Date.Hour : 0, Minute = baseUnit >= BaseUnit.Minutes ? s.Date.Minute : 0 } into g select g; var points = from g in groupedData.ToList() select new StockDataPoint { Date = new DateTime(g.Key.Year, g.Key.Month, g.Key.Day, g.Key.Hour, g.Key.Minute, 0), Open = g.Max(s => s.Open), High = g.Max(s => s.High), Low = g.Min(s => s.Low), Close = g.Max(s => s.Close), Volume = g.Sum(s => s.Volume) }; result = points.ToList();