コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }
コード例 #3
0
        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));
        }
コード例 #4
0
 protected internal override MixinEntityExpression VisitMixinEntity(MixinEntityExpression me)
 {
     throw new InvalidOperationException("Impossible to retrieve MixinEntity {0} without their main entity".FormatWith(me.Type.Name));
 }