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