/// <summary> /// 执行查询并返回结果集 /// </summary> /// <typeparam name="TResult">接受查询结果对象类型</typeparam> /// <returns></returns> public List <TResult> ExecuteReader <TResult>(string cmdText) { List <TResult> list = new List <TResult>(); DynamicBuilder <TResult> builder = null; void action(DbDataReader dr) { TResult obj = default(TResult); Type objType = typeof(TResult); bool isTuple = objType.Namespace == "System" && objType.Name.StartsWith("ValueTuple`"); if (isTuple) { int columnIndex = -1; obj = (TResult)GetValueTuple(objType, dr, ref columnIndex); } else if (IsValueType(objType)) { obj = (TResult)GetValueType(objType, dr); } else if (objType.Namespace.StartsWith("Newtonsoft")) { obj = (TResult)GetJToken(dr); } else { if (builder == null) { builder = DynamicBuilder <TResult> .CreateBuilder(dr); } obj = builder.Build(dr); } list.Add(obj); } if (PgSqlHelper.InstanceSlave != null && !Master) { PgSqlHelper.ExecuteDataReaderSlave(action, CommandType.Text, cmdText, this.ParamList.ToArray()); } else { PgSqlHelper.ExecuteDataReader(action, CommandType.Text, cmdText, this.ParamList.ToArray()); } return(list); }
/// <summary> /// 执行查询并返回结果集 /// </summary> /// <typeparam name="TResult">接受查询结果对象类型</typeparam> /// <returns></returns> public List <TResult> ExecuteReader <TResult>(string cmdText) { List <TResult> list = new List <TResult>(); DynamicBuilder <TResult> builder = null; Type objType = typeof(TResult); try { if (Master) { PgSqlHelper.ExecuteDataReader(dr => { var obj = ReadObj <TResult>(ref builder, dr, objType); list.Add(obj); } , CommandType.Text, cmdText, command => { this.Command = command; this.Connection = command?.Connection; }, this.ParamList.ToArray()); } else { PgSqlHelper.ExecuteDataReaderSlave(dr => { var obj = ReadObj <TResult>(ref builder, dr, objType); list.Add(obj); } , CommandType.Text, cmdText, command => { this.Command = command; this.Connection = command?.Connection; }, this.ParamList.ToArray()); } } finally { this.Clear(); } return(list); }