public static IFullPropertyMetadata Nest <TParentEntity, TEntity>( this IFullPropertyMetadata propertyMetadata, Func <TParentEntity, TEntity?> parentGettter) { var propertyMetadataType = typeof(NestedPropertyMetadata <, ,>) .MakeGenericType(typeof(TParentEntity), typeof(TEntity), propertyMetadata.PropertyType); return(Activator.CreateInstance(propertyMetadataType, parentGettter, propertyMetadata) as IFullPropertyMetadata ?? throw new InvalidOperationException()); }
public NestedPropertyMetadata( Func <TParentEntity, TEntity> parent, IFullPropertyMetadata propertyMetadata) { PropertyType = propertyMetadata.PropertyType; PropertyName = propertyMetadata.PropertyName; Fingerprint = $"{propertyMetadata.Fingerprint}::{typeof(TParentEntity).Name}"; Getter = x => { if (parent.Invoke((TParentEntity)x) is object obj) { return(propertyMetadata.Getter.Invoke(obj)); } return(default !);