public async Task <List <GroupDataModel> > GetGroupChart(GroupModel model) { try { var result = new List <GroupDataModel>(); var total = 0.0; switch (model.period) { case PiePeriod.Day: model.From = CleanDateTime(DateTime.Now).AddHours(-24); model.To = DateTime.Now; break; case PiePeriod.Week: model.From = CleanDateTime(DateTime.Now).AddDays(-7); model.To = DateTime.Now; break; case PiePeriod.Month: model.From = CleanDateTime(DateTime.Now).AddMonths(-1); model.To = DateTime.Now; break; case PiePeriod.Year: model.From = CleanDateTime(DateTime.Now).AddYears(-1); model.To = DateTime.Now; break; case PiePeriod.Custom: break; default: break; } foreach (var groupId in model.Ids) { var group = new GroupDataModel(); var ids = new List <int>(); using (SqlConnection connection = new SqlConnection(_groupConnectionString)) { var command = new SqlCommand(); command.Connection = connection; command.CommandType = System.Data.CommandType.Text; command.CommandText = "SELECT EntityId FROM Meters Where GroupId = @Id"; command.Parameters.Add(new SqlParameter("@Id", groupId)); await connection.OpenAsync(); using (SqlDataReader reader = await command.ExecuteReaderAsync()) { while (await reader.ReadAsync()) { ids.Add(Convert.ToInt16(reader["EntityId"])); } } using (SqlConnection connection2 = new SqlConnection(_groupConnectionString)) { var command2 = new SqlCommand(); command2.Connection = connection2; command2.CommandType = System.Data.CommandType.Text; command2.CommandText = "SELECT Name FROM Groups WHERE Id = @Id"; command2.Parameters.Add(new SqlParameter("@Id", groupId)); await connection2.OpenAsync(); using (SqlDataReader reader2 = await command2.ExecuteReaderAsync()) { if (await reader2.ReadAsync()) { group.name = group.drilldown = reader2["Name"].ToString(); } } } connection.Close(); } await GetGroupDrillDown(group, ids, model.From, model.To); result.Add(group); total += group.y; } foreach (var group in result) { group.y = group.y / total; group.y *= 100; } return(result); } catch (Exception ex) { throw ex; } }