//生成语句插入的成员。 private void GenerateForInsertStatementMembers(GenerateContext context, DbNewExpression newitem, QueryBaseFragment source, InsertFragment insert, Func <PropertyInfo, ColumnMetadata> getmember) { int count = 0; foreach (var item in newitem.Members) { count++; insert.CreateMember(null, getmember((PropertyInfo)item.Key)); IMemberFragment member = null; if (_CreateExpressionMethods.TryGetValue(item.Value.ExpressionType, out CreateExpressionDelegate method)) { member = RetrievalMemberForExpression(context, source, item.Value, item.Key, false); } else if (_RetrievalMemberMethods.TryGetValue(item.Value.ExpressionType, out RetrievalMemberDelegate method1)) { member = method1(context, source, item.Value, item.Key, false); } else { throw new NotSupportedException(Res.NotSupportedCreateInsertMember); } if (source.Members.Count != count) { source.Members.Add(member); } } }
private DbUnitItemTypeExpression NewTranslate(TranslationContext context, NewExpression exp) { var memberCount = exp.Members == null ? 0 : exp.Members.Count; if (exp.Arguments.Count != memberCount) { throw new TranslateException(exp, Res.ExceptionIsMustParameterlessConstructor); } var newExp = new DbNewExpression(exp.Type); for (int i = 0; i < memberCount; i++) { newExp.Members.Add(exp.Members[i], ExpressionTranslate(context, exp.Arguments[i])); } return(newExp); }
private DbUnitItemTypeExpression MemberInitTranslate(TranslationContext context, MemberInitExpression exp) { if (exp.NewExpression.Arguments.Count > 0) { throw new TranslateException(exp, Res.ExceptionIsMustParameterlessConstructor); } var newExp = new DbNewExpression(exp.Type); foreach (var bind in exp.Bindings) { switch (bind.BindingType) { case MemberBindingType.Assignment: newExp.Members.Add(bind.Member, ExpressionTranslate(context, ((MemberAssignment)bind).Expression)); break; default: throw new NotSupportedException(string.Format(Res.NotSupportedNewMemberBindingType, bind.BindingType)); } } return(newExp); }
public override ISqlPart Visit(DbNewExpression dbExpression) { throw new NotImplementedException(); }