public static IDynamicBuilder <T> WithTransformedValue <T, TProperty>(this IDynamicBuilder <T> builder, Expression <Func <T, TProperty> > property, Func <TProperty, TProperty> transformation) { Assert.IsNotNull(transformation, nameof(transformation)); var value = builder.GetOverwrittenValue(property); var transformedValue = transformation(value); return(WithValue(builder, property, transformedValue)); }
public static TProperty GetOverwrittenValue <T, TProperty>(this IDynamicBuilder <T> builder, Expression <Func <T, TProperty> > property) { Assert.IsNotNull(builder, nameof(builder)); Assert.IsNotNull(property, nameof(property)); string name = ExtractMemberAccessor(property).Member.Name; return (builder.IsOverwritten(name) ? builder.GetOverwrittenValue <TProperty>(name) : default(TProperty)); }
public static IDynamicBuilder <T> WithElements <T, TElement>(this IDynamicBuilder <T> builder, Expression <Func <T, IEnumerable <TElement> > > enumerableProperty, IEnumerable <TElement> elements) { var value = builder.GetOverwrittenValue(enumerableProperty); if (value == null) { value = elements; } else { value = value.Concat(elements); } return(WithValue(builder, enumerableProperty, value)); }
public static IDynamicBuilder <T> WithBuilderDependentElement <T, TElement>(this IDynamicBuilder <T> builder, Expression <Func <T, IEnumerable <TElement> > > enumerableProperty, Func <IDynamicBuilder <T>, TElement> getElement) { Assert.IsNotNull(builder, nameof(builder)); Assert.IsNotNull(getElement, nameof(getElement)); var element = getElement(builder); var value = builder.GetOverwrittenValue(enumerableProperty); if (value == null) { value = new[] { element } } ; else { value = value.Concat(new[] { element }); } return(WithBuilderDependentValue(builder, enumerableProperty, b => value)); }
public static IDynamicBuilder <T> WithElement <T, TElement>(this IDynamicBuilder <T> builder, Expression <Func <T, IEnumerable <TElement> > > enumerableProperty, TElement element) { var value = builder.GetOverwrittenValue(enumerableProperty); if (value == null) { value = new[] { element } } ; else if (value is ICollection <TElement> collection && !collection.IsReadOnly) { collection.Add(element); } else { value = value.Concat(new[] { element }); } return(WithValue(builder, enumerableProperty, value)); }
public static TProperty GetOverwrittenValue <TProperty>(this IDynamicBuilder builder, string name) => (TProperty)builder.GetOverwrittenValue(name);