Esempio n. 1
0
        public virtual StringBuilder BuildUpdateSets(IObjectMapInfo map, object entity)
        {
            StringBuilder b = new StringBuilder();
            IReflector    r = Reflector.Bind(entity);

            foreach (var pmi in map.NonPKPropertyMaps)
            {
                b.Append(_tr.GetEscapedColumnName(pmi.ColumnName));
                b.Append(_tr.Equal).Append(_tr.GetValueString(r.GetPropertyValue(pmi.PropertyName)));
                b.Append(_tr.ColumnDelimiter);
            }
            b.RemoveEnd(_tr.ColumnDelimiter);
            return(b);
        }
        protected override Expression VisitMethodCall(MethodCallExpression m)
        {
            if (m.Method.DeclaringType.Name == ExtensionFunctionNames.EXT_CLASS)
            {
                _str.Append(StringPair.Parenthesis.Begin);

                switch (m.Method.Name)
                {
                case ExtensionFunctionNames.FUNC_TRUE:
                    string v = _tr.GetValueString(1);
                    _str.Append(v).Append(_tr.Equal).Append(v);
                    break;

                case ExtensionFunctionNames.FUNC_FALSE:
                    string v1 = _tr.GetValueString(1);
                    string v0 = _tr.GetValueString(0);
                    _str.Append(v1).Append(_tr.Equal).Append(v0);
                    break;

                case ExtensionFunctionNames.FUNC_IN:
                    Visit(m.Arguments[0]);    //Note:Extension method, visit the 1st param first.
                    _str.Append(_tr.In);
                    _str.Append(StringPair.Parenthesis.Begin);

                    //Note: the 2nd param is an IEnumerable(params T[] is also IEnumerable).
                    IEnumerable seq = (m.Arguments[1] as ConstantExpression).Value as IEnumerable;
                    foreach (object item in seq)
                    {
                        _str.Append(_tr.GetValueString(item)).Append(_tr.ColumnDelimiter);
                    }

                    _str.RemoveEnd(_tr.ColumnDelimiter);

                    _str.Append(StringPair.Parenthesis.End);

                    break;

                case ExtensionFunctionNames.FUNC_LIKE:
                    Visit(m.Arguments[0]);    //Note:Extension method, visit the 1st param first.
                    _str.Append(_tr.Like);

                    object pattern = (m.Arguments[1] as ConstantExpression).Value;
                    _str.Append(_tr.GetValueString(pattern));

                    break;

                default:
                    ParseExceptionHelper.ThrowNotSupportedExpression(m);
                    break;
                }

                _str.Append(StringPair.Parenthesis.End);
                return(m);
            }

            ParseExceptionHelper.ThrowNotSupportedExpression(m);
            return(m);
        }