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; }
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); }