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