private async Task <IEnumerable <UserRankingResponseData> > GetUserRankingData(TableSets data)
        {
            var res = await Task.Run(() =>
            {
                var result  = new List <UserRankingResponseData>();
                var tmpDate = data.Elements.First();

                foreach (var row in tmpDate.Rows)
                {
                    result.Add(
                        new UserRankingResponseData
                    {
                        Place       = Convert.ToInt32(row.Elements[0]),
                        NickName    = Convert.ToString(row.Elements[1]),
                        Kills       = Convert.ToInt32(row.Elements[2]),
                        KD          = Convert.ToDouble(row.Elements[3]),
                        GamesPlayed = Convert.ToInt32(row.Elements[4]),
                        GamesWon    = Convert.ToInt32(row.Elements[5]),
                        ClanName    = Convert.ToString(row.Elements[6])
                    });
                }
                return(result);
            });

            return(res);
        }
        public async Task <TableSets> ExecuteDataCommand(string command, CommandType commandType, int?timeout = null, params SqlParameter[] parameters)
        {
            SqlConnection connection = null;
            TableSets     tableSets  = new TableSets();

            try
            {
                connection = new SqlConnection(GetSqlConnection());
                await connection.OpenAsync();

                using (var sqlCommand = connection.CreateCommand())
                {
                    sqlCommand.CommandText = command;
                    sqlCommand.CommandType = commandType;
                    sqlCommand.Parameters.AddRange(parameters);
                    sqlCommand.CommandTimeout = 3000;

                    if (timeout.HasValue)
                    {
                        sqlCommand.CommandTimeout = timeout.Value;
                    }

                    using (var sqlReader = await sqlCommand.ExecuteReaderAsync())
                    {
                        do
                        {
                            TableSet tableSet = new TableSet();

                            var columnSchema = sqlReader.GetColumnSchema();
                            if (columnSchema == null)
                            {
                                throw new Exception("Table schema does not contain data");
                            }
                            var columns = columnSchema.Select(t => new { Type = t.DataType.FullName, Value = t.ColumnName }).ToDictionary(t => t.Value, v => v.Type);

                            tableSet.SetTableHeader(columns);

                            while (sqlReader.ReadAsync().Result) // Read the row
                            {
                                Row row = new Row();
                                foreach (var column in columns) // Read single value
                                {
                                    var item = sqlReader.GetFieldValueAsync <object>(sqlReader.GetOrdinal(column.Key)).Result;
                                    row.Elements.Add(item);
                                }
                                tableSet.Rows.Add(row);
                            }
                            tableSets.Elements.Add(tableSet);
                        } while (sqlReader.NextResultAsync().Result); // Get next table
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            finally
            {
                connection?.CloseAsync();
            }

            return(tableSets);
        }
        private async Task <IEnumerable <ClanRankingResponseModel> > GetClanRankingData(TableSets data)
        {
            return(await Task.Run(() =>
            {
                var result = new List <ClanRankingResponseModel>();
                var tmpDate = data.Elements.First();

                foreach (var row in tmpDate.Rows)
                {
                    result.Add(
                        new ClanRankingResponseModel
                    {
                        Name = Convert.ToString(row.Elements[0]),
                        Wins = Convert.ToInt32(row.Elements[1]),
                        Losses = Convert.ToInt32(row.Elements[2]),
                        Draws = Convert.ToInt32(row.Elements[3]),
                        Experience = Convert.ToInt32(row.Elements[4])
                    });
                }
                return result;
            }));
        }