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); }
/// <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); }
/// <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); }
/// <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); }