Exemple #1
0
 /// <summary>
 /// 查询块,通常用于最终执行前 生成where。
 /// </summary>
 /// <typeparam name="T">任意类型</typeparam>
 /// <param name="where">where action</param>
 /// <param name="end">end action</param>
 /// <returns>返回处理结果。</returns>
 public T QueryBlock <T>(UpdateCommandBuilderQueryBlockWhereAction where, UpdateCommandBuilderQueryBlockEndAction <T> end)
 {
     PreRemoveFields();
     using (ISelectCommandBuilder whereBuilder = CreateSelect()) {
         System.Collections.Generic.List <object> array = new System.Collections.Generic.List <object>();
         System.Collections.Generic.List <string> names = new System.Collections.Generic.List <string>();
         whereBuilder.AddCommandParameter = (p) => {
             array.Add(p);
             string name = "@p_" + (array.Count + _fields.Count);
             names.Add(name);
             return(name);
         };
         whereBuilder.Select("1");
         if (where != null)
         {
             if (!where (whereBuilder))
             {
                 return(default(T));
             }
         }
         if (end != null)
         {
             string commandText      = BuilderCommandText();
             string whereCommandText = whereBuilder.WhereCommandText;
             for (int i = 0; i < names.Count; i++)
             {
                 string name = "@p" + (i + 1 + _fields.Count);
                 whereCommandText = whereCommandText.Replace(names[i], name);
             }
             return(end(commandText + whereCommandText, GetValues(array.ToArray())));
         }
         return(default(T));
     }
 }
Exemple #2
0
        /// <summary>
        /// 创建查询命令构造器(自动关联参数)。
        /// </summary>
        /// <returns>返回构造器对象。</returns>
        public virtual ISelectCommandBuilder CreateBuilder()
        {
            ISelectCommandBuilder builder = _dataContext.CreateSelect("table", CommandText);

            builder.AddCommandParameter = AddCommandParameter_ISelectCommandBuilder;
            builder.AutoEnd             = true;
            System.EventHandler endedHandler = null; endedHandler = (p1, p2) => {
                builder.Ended -= endedHandler;
                CommandText    = builder.CommandText;
            };
            builder.Ended += endedHandler;
            return(builder);
        }