protected internal override MixinEntityExpression VisitMixinEntity(MixinEntityExpression me) { var bindings = VisitBindings(me.Bindings); if (me.Bindings != bindings || me.EntityContext != null) { return(new MixinEntityExpression(me.Type, bindings, me.MainEntityAlias, me.FieldMixin, null)); } return(me); }
protected internal virtual MixinEntityExpression VisitMixinEntity(MixinEntityExpression me) { var bindings = Visit(me.Bindings, VisitFieldBinding); var entityContext = me.EntityContext == null ? null : VisitEntityContextInfo(me.EntityContext); if (me.Bindings != bindings || me.EntityContext != entityContext) { return(new MixinEntityExpression(me.Type, bindings, me.MainEntityAlias, me.FieldMixin, entityContext)); } return(me); }
BlockExpression AssignMixin(ParameterExpression e, MixinEntityExpression m) { var mixParam = Expression.Parameter(m.Type); var mixBindings = new List <Expression> { Expression.Assign(mixParam, Expression.Call(e, MixinDeclarations.miMixin.MakeGenericMethod(m.Type))), Expression.Call(retriever, miModifiablePostRetrieving.MakeGenericMethod(m.Type), mixParam) }; mixBindings.AddRange(m.Bindings.Select(b => { var field = Expression.Field(mixParam, b.FieldInfo); var value = b.Binding is ChildProjectionExpression cpe ? VisitMListChildProjection(cpe, field) : Convert(Visit(b.Binding), b.FieldInfo.FieldType); return((Expression)Expression.Assign(field, value)); })); return(Expression.Block(new[] { mixParam }, mixBindings)); }
protected internal override MixinEntityExpression VisitMixinEntity(MixinEntityExpression me) { throw new InvalidOperationException("Impossible to retrieve MixinEntity {0} without their main entity".FormatWith(me.Type.Name)); }