public IEnumerable <TRes> Result <TRes>() where TRes : class { Ai.Guard.Check(proc != null && proc.Connection != null, "MultiResult proc error"); if (numerator == null) { yield break; } if (typeof(TRes).Equals(typeof(object[]))) { do { var values = numerator.Current as object[]; // DbDataRecord; yield return(values as TRes); } while (numerator.MoveNext()); } var helper = new DbDataMapHelper <TRes>(); var cycle = numerator; do { var rec = numerator.Current as object[]; // as DbDataRecord; if (rec == null) { yield break; // first error } var objArray = DbRecord(reader.FieldCount); TRes obj = helper.SetValues(objArray); yield return(obj); }while (cycle.MoveNext()); }
public IEnumerator <ExpandoObject> GetEnumerator() { Reset(); DbEnumeratorData numerator = Numerator; if (numerator == null || numerator.Reader == null || !numerator.MoveNext()) { yield break; } do { var rec = numerator.Current as object[]; // IDataRecord; if (rec == null || rec.Length == 0) { yield break; // first error } dynamic obj = helper.Get(rec); if (obj != null) { yield return(obj); } }while (numerator.MoveNext()); }
public MultiResult <T> Prepare(SqlProc proc , Action <SqlCommand> setup = null , Action <SqlField[]> onReadFields = null , bool noMoveFirst = false ) { this.proc = proc; var mapper = new DbObject(); numerator = DbEnumeratorData.GetEnumerator(() => { this.reader = SqlMultiDyn.ExecMultiReader(proc, setup, progress: null); return(reader); }); if (numerator == null) { return(null); } if (reader.IsClosed || reader.Depth != 0) { return(null); } if (noMoveFirst) { return(this); } numerator.MoveNext(); var rec = numerator.Current as object[]; // DbDataRecord; mapHelper = mapper.GetProperties(reader); Fields = reader.GetFields(); // SqlFieldArray FirstRecord = rec; // mapHelper.SetValues(mapHelper.DbRecordArray()); return(this); }