/// <summary> /// 预处理:字段值-字典 /// </summary> /// <param name="builder">构造缓存。</param> /// <param name="name">字段名称。</param> /// <param name="nodeValue">值包装</param> /// <param name="i">顺序。</param> /// <param name="pIndex">参数顺序。</param> /// <returns>返回是否过滤。</returns> protected virtual bool PreFieldValue_Dictionary(System.Text.StringBuilder builder, string name, NoSQL.NodeValue nodeValue, ref int i, ref int pIndex) { if (nodeValue.Type == NoSQL.NodeValueTypes.Null) { return(false); } foreach (object item in (System.Collections.IEnumerable)nodeValue.Value) { string key = FastWrapper.Get(item, "Key") as string; if (string.IsNullOrEmpty(key)) { continue; } NoSQL.NodeValue value = new NoSQL.NodeValue(FastWrapper.Get(item, "Value")); if ( string.Equals(key, "$add", System.StringComparison.OrdinalIgnoreCase) || string.Equals(key, "$+", System.StringComparison.OrdinalIgnoreCase)) { i++; if (i > 1) { builder.AppendLine(","); } builder.AppendFormat(" {0}={0}+@p{1}", PreName(name), ++pIndex); _fields[name] = value.Value; return(true); } else if ( string.Equals(key, "$minus", System.StringComparison.OrdinalIgnoreCase) || string.Equals(key, "$-", System.StringComparison.OrdinalIgnoreCase)) { i++; if (i > 1) { builder.AppendLine(","); } builder.AppendFormat(" {0}={0}-@p{1}", PreName(name), ++pIndex); _fields[name] = value.Value; return(true); } else if ( string.Equals(key, "$now", System.StringComparison.OrdinalIgnoreCase)) { i++; if (i > 1) { builder.AppendLine(","); } builder.Append(" ").Append(PreName(name)).Append('=').Append(DateTimeNowGrammar()); _fields.Remove(name); return(true); } } return(false); }
/// <summary> /// 预处理:字段值 /// </summary> /// <param name="builder">构造缓存。</param> /// <param name="name">字段名称。</param> /// <param name="value">字段值。</param> /// <param name="i">顺序。</param> /// <param name="pIndex">参数顺序。</param> /// <returns>返回是否过滤。</returns> protected virtual bool PreFieldValue(System.Text.StringBuilder builder, string name, object value, ref int i, ref int pIndex) { var p = value as CommandParameter; NoSQL.NodeValue nodeValue = new NoSQL.NodeValue(p == null ? value : p.Value); if (nodeValue.Type == NoSQL.NodeValueTypes.Dictionary) { return(PreFieldValue_Dictionary(builder, name, nodeValue, ref i, ref pIndex)); } if (nodeValue.Type == NoSQL.NodeValueTypes.String) { return(PreFieldValue_String(builder, name, nodeValue, ref i, ref pIndex)); } return(false); }
/// <summary> /// 预处理:字段值-文本 /// </summary> /// <param name="builder">构造缓存。</param> /// <param name="name">字段名称。</param> /// <param name="nodeValue">值包装</param> /// <param name="i">顺序。</param> /// <param name="pIndex">参数顺序。</param> /// <returns>返回是否过滤。</returns> protected virtual bool PreFieldValue_String(System.Text.StringBuilder builder, string name, NoSQL.NodeValue nodeValue, ref int i, ref int pIndex) { string text = ((string)nodeValue.Value)?.Trim(); if (string.IsNullOrEmpty(text)) { return(false); } if (text.StartsWith("{") && text.EndsWith("}")) { return(PreFieldValue_Dictionary(builder, name, new NoSQL.NodeValue(JSON.Parse(text)), ref i, ref pIndex)); } return(false); }