public static PropertyReferenceCollection GetReturnProperties(this SmartObject smartObject)
        {
            if (smartObject == null)
            {
                throw new ArgumentNullException("smartObject");
            }

            var method = smartObject.GetExecutingMethod();

            if (method == null)
            {
                throw new NullReferenceException("method");
            }

            var propertyReferenceCollectionType = typeof(PropertyReferenceCollection);
            var ctor = propertyReferenceCollectionType.GetConstructors(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).First();

            var propertyCollection = (PropertyReferenceCollection)ctor.Invoke(new object[] { });

            var addMethod = propertyReferenceCollectionType.GetMethod("Add", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

            foreach (SmartProperty returnProperty in method.ReturnProperties)
            {
                var property = smartObject.Properties[returnProperty.Name];
                addMethod.Invoke(propertyCollection, new object[] { property });
            }

            return(propertyCollection);
        }
        public static void SetFilter(this SmartObject smartObject, LogicalFilter filter)
        {
            var listMethod = smartObject.GetExecutingMethod() as SmartListMethod;

            listMethod.Filter = filter;
        }