示例#1
0
        public PPropertyBuilder <T> Property <U>(Expression <Func <T, U> > expression)
        {
            if (!(expression.Body is MemberExpression member))
            {
                throw new ArgumentException(string.Format(
                                                "Expression '{0}' refers to a method, not a property.",
                                                expression.ToString()));
            }

            PropertyInfo propInfo = member.Member as PropertyInfo;

            if (propInfo == null)
            {
                throw new ArgumentException(string.Format(
                                                "Expression '{0}' refers to a field, not a property.",
                                                expression.ToString()));
            }

            if (this._Type != propInfo.ReflectedType &&
                !this._Type.IsSubclassOf(propInfo.ReflectedType))
            {
                throw new ArgumentException(string.Format(
                                                "Expression '{0}' refers to a property that is not from type {1}.",
                                                expression.ToString(),
                                                this._Type));
            }

            if (!_Builders.TryGetValue(propInfo, out PPropertyBuilder <T> builder))
            {
                builder = new PPropertyBuilder <T>(this, propInfo);
                _Builders.Add(propInfo, builder);
            }

            return(builder);
        }
        /// <summary>Marks the property as filterable, referenced by a specific alias.</summary>
        public static PPropertyBuilder <T> IsFilterableAs <T>(this PPropertyBuilder <T> pPropertyBuilder, string alias)
            where T : class
        {
            var generator = pPropertyBuilder.Entity.GetOrCreateGenerator <IFilterParticle <T>, ByPropertyAliasParticleGenerator <T> >();

            generator.Add(alias, pPropertyBuilder.PropertyInfo);
            return(pPropertyBuilder);
        }
示例#3
0
        /// <summary>Marks the property as not sortable, referenced by its name.</summary>
        public static PPropertyBuilder <T> IsNotSortableByName <T>(this PPropertyBuilder <T> pPropertyBuilder)
            where T : class
        {
            var generator = pPropertyBuilder.Entity.GetOrCreateGenerator <ISortParticle <T>, ByPropertyNameParticleGenerator <T> >();

            generator.Remove(pPropertyBuilder.PropertyInfo);
            return(pPropertyBuilder);
        }
示例#4
0
        /// <summary>Marks the property as filterable, referenced by its name.</summary>
        public static PPropertyBuilder <T> IsFilterableByName <T>(this PPropertyBuilder <T> pPropertyBuilder)
            where T : class
        {
            var generator = pPropertyBuilder.Entity.GetOrCreateGenerator <IFilterParticle <T>, ByPropertyNameParticleGenerator <T> >();

            generator.Add(pPropertyBuilder.PropertyInfo);
            return(pPropertyBuilder);
        }
示例#5
0
        /// <summary>Marks the property as not sortable, referenced by a specific alias.</summary>
        public static PPropertyBuilder <T> IsNotSortableAs <T>(this PPropertyBuilder <T> pPropertyBuilder, string alias)
            where T : class
        {
            var generator = pPropertyBuilder.Entity.GetOrCreateGenerator <ISortParticle <T>, ByPropertyAliasParticleGenerator <T> >();

            generator.Remove(alias);
            return(pPropertyBuilder);
        }