/// <summary> /// Excepts the specified builder. /// </summary> /// <typeparam name="TPropertyType">The type of the t property type.</typeparam> /// <typeparam name="TClassType">The type of the t class type.</typeparam> /// <param name="builder">The builder.</param> /// <param name="propertyExpressions">The property expressions.</param> /// <returns>Xenial.Framework.ModelBuilders.IAggregatedPropertyBuilder<TPropertyType, TClassType>.</returns> /// <autogeneratedoc /> public static IAggregatedPropertyBuilder <TPropertyType, TClassType> Except <TPropertyType, TClassType>( this IAggregatedPropertyBuilder <TPropertyType, TClassType> builder, params Expression <Func <TClassType, TPropertyType?> >[] propertyExpressions ) { _ = builder ?? throw new ArgumentNullException(nameof(builder)); var propertyBuilders = builder.PropertyBuilders.ToList(); foreach (var propertyExpression in propertyExpressions) { _ = propertyExpression ?? throw new ArgumentNullException(nameof(propertyExpressions)); var propertyName = builder.ModelBuilder.ExpressionHelper.Property(propertyExpression); if (propertyName is not null) { var memberInfo = builder.ModelBuilder.TypeInfo.FindMember(propertyName); if (memberInfo is not null) { var propertyBuilder = propertyBuilders.FirstOrDefault(m => m.MemberInfo == memberInfo); if (propertyBuilder is not null) { propertyBuilders.Remove(propertyBuilder); } } } } return(new AggregatedPropertyBuilder <TPropertyType, TClassType>(builder.ModelBuilder, propertyBuilders)); }
/// <summary> /// Excepts the specified builder. /// </summary> /// <typeparam name="TPropertyType">The type of the t property type.</typeparam> /// <typeparam name="TClassType">The type of the t class type.</typeparam> /// <param name="builder">The builder.</param> /// <param name="exceptFilter">The except filter.</param> /// <returns>Xenial.Framework.ModelBuilders.IAggregatedPropertyBuilder<TPropertyType, TClassType>.</returns> /// <autogeneratedoc /> public static IAggregatedPropertyBuilder <TPropertyType, TClassType> Except <TPropertyType, TClassType>( this IAggregatedPropertyBuilder <TPropertyType, TClassType> builder, Func <IEnumerable <IPropertyBuilder <TPropertyType, TClassType> >, IEnumerable <IPropertyBuilder <TPropertyType, TClassType> > > exceptFilter ) { _ = builder ?? throw new ArgumentNullException(nameof(exceptFilter)); _ = exceptFilter ?? throw new ArgumentNullException(nameof(builder)); var propertyBuilders = exceptFilter(builder.PropertyBuilders); propertyBuilders = builder.PropertyBuilders.Except(propertyBuilders); return(new AggregatedPropertyBuilder <TPropertyType, TClassType>(builder.ModelBuilder, propertyBuilders)); }