Пример #1
0
        //生成语句插入的成员。
        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);
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 public override ISqlPart Visit(DbNewExpression dbExpression)
 {
     throw new NotImplementedException();
 }