/// <summary>
        /// Generic method to get all rows in the table, with order by and paging options
        /// </summary>
        /// <returns>List of T objects</returns>
        public async Task <IEnumerable <T> > GetAllAsync(CollectionParameters parameters)
        {
            string orderby = string.Empty;
            string top     = string.Empty;
            string offset  = string.Empty;

            if (parameters.OrderBy != null && parameters.OrderBy.Length > 0 && typeof(T).GetProperties().Count(f => f.Name.Equals(parameters.OrderBy)) == 1)
            {
                orderby = "ORDER BY " + parameters.OrderBy + ((parameters.Ordering == AscDec.Asc) ? " ASC" : " DESC");
            }

            if (parameters.Limit != null && parameters.Limit > 0)
            {
                top = $"TOP({parameters.Limit})";
            }

            if (parameters.Offset != null && parameters.Offset > 0)
            {
                offset = $"OFFSET {parameters.Offset} ROWS";
            }

            string sql = $"SELECT {top} * FROM {_tableName} {orderby} {offset} ";

            return(await _connection.QueryAsync <T>(sql, transaction : _transaction));
        }
 public abstract Task <IEnumerable <T> > FindAsync(string search, CollectionParameters parameters);