/// <summary>
        /// Adds a property setter for all primitive properties on T that
        /// meet the filter
        /// </summary>
        /// <param format="filter"></param>
        /// <returns></returns>
        public ObjectConstructionExpression <T> SetAllPrimitiveProperties(Func <PropertyInfo, bool> filter)
        {
            foreach (PropertyInfo property in typeof(T).GetProperties())
            {
                if (!property.CanWrite)
                {
                    continue;
                }
                if (!property.PropertyType.IsSimple())
                {
                    continue;
                }
                if (!filter(property))
                {
                    continue;
                }


                var accessor = new SingleProperty(property);


                var child = new SetPropertyGrammar(accessor);
                _grammar.AddGrammar(child);
            }

            return(this);
        }
        /// <summary>
        /// Creates a line to set a single property
        /// </summary>
        /// <param format="expression"></param>
        /// <returns></returns>
        public ICellExpression SetProperty(Expression <Func <T, object> > expression, string defaultValue = null)
        {
            var grammar = SetPropertyGrammar.For(expression);

            _grammar.AddGrammar(grammar);

            if (defaultValue.IsNotEmpty())
            {
                grammar.CellModifications.DefaultValue(defaultValue);
            }

            return(grammar.CellModifications);
        }