예제 #1
0
        public MixinEntityExpression(Type type, IEnumerable <FieldBinding> bindings, Alias mainEntityAlias, FieldMixin fieldMixin)
            : base(DbExpressionType.MixinInit, type)
        {
            if (bindings == null)
            {
                throw new ArgumentNullException("bindings");
            }

            Bindings = bindings.ToReadOnly();

            FieldMixin = fieldMixin;

            MainEntityAlias = mainEntityAlias;
        }
예제 #2
0
        private BlockExpression MaterializeMixin(ParameterExpression me, FieldMixin mixin, ParameterExpression mixParam)
        {
            List <Expression> mixBindings = new List <Expression>();

            mixBindings.Add(Expression.Assign(mixParam, GetMixin(me, mixin.FieldType)));
            mixBindings.Add(Expression.Call(retriever, miModifiablePostRetrieving.MakeGenericMethod(mixin.FieldType), mixParam));

            foreach (var f in mixin.Fields.Values)
            {
                Expression value     = MaterializeField(f.Field);
                var        assigment = Expression.Assign(Expression.Field(mixParam, f.FieldInfo), value);
                mixBindings.Add(assigment);
            }

            var mixBlock = Expression.Block(new[] { mixParam }, mixBindings);

            return(mixBlock);
        }