public string[] GetParameters <T>(DatabaseParameterListMode mode, string table = "")
        {
            var type       = typeof(T);
            var properties = type.GetProperties();
            var columns    = new List <String>();

            foreach (var property in properties)
            {
                var attributes = property.GetCustomAttributes <Column>();

                if (attributes == null || attributes.Count() == 0)
                {
                    continue;
                }

                Column attribute = null;

                if (string.IsNullOrEmpty(table))
                {
                    attribute = attributes.FirstOrDefault();
                }
                else
                {
                    attribute = attributes.Where(x => x.Table.Equals(table, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
                }

                if (attribute == null)
                {
                    continue;
                }

                if (mode == DatabaseParameterListMode.ToInsertStatements && !attribute.Insert)
                {
                    continue;
                }

                if (mode == DatabaseParameterListMode.ToUpdateStatements && !attribute.Update)
                {
                    continue;
                }

                string column = "";

                switch (mode)
                {
                case DatabaseParameterListMode.ToInsertStatements:
                case DatabaseParameterListMode.OnlyList:
                    column = NormalizeParameterName(attribute.Name);
                    break;

                case DatabaseParameterListMode.ToUpdateStatements:
                    column = $"{attribute.Name} = {NormalizeParameterName(attribute.Name)}";
                    break;
                }

                columns.Add(column);
            }

            return(columns.ToArray());
        }
        public Database AddParameters <T>(T entity, DatabaseParameterListMode mode, string table = "")
        {
            var type       = typeof(T);
            var properties = type.GetProperties();
            var columns    = new List <String>();

            foreach (var property in properties)
            {
                var attributes = property.GetCustomAttributes <Column>();

                if (attributes == null || attributes.Count() == 0)
                {
                    continue;
                }

                Column attribute = null;

                if (string.IsNullOrEmpty(table))
                {
                    attribute = attributes.FirstOrDefault();
                }
                else
                {
                    attribute = attributes.Where(x => x.Table.Equals(table, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault();
                }

                if (attribute == null)
                {
                    continue;
                }

                if (mode == DatabaseParameterListMode.ToInsertStatements && !attribute.Insert)
                {
                    continue;
                }

                if (mode == DatabaseParameterListMode.ToUpdateStatements && !attribute.Update)
                {
                    continue;
                }

                AddParameterInput(NormalizeParameterName(attribute.Name), property.GetValue(entity));
            }

            return(this);
        }