Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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);
        }