コード例 #1
0
        /// <summary>
        /// Finds the one page of singers for one singer.
        /// </summary>
        /// <returns>The one page of singers for one singer.</returns>
        /// <param name="mState">Singer state.</param>
        /// <param name="singer">Singer.</param>
        /// <param name="id">Identifier.</param>
        public List <Singer> FindOnePageOfSingersForOneSinger(StateOfRequest mState, Singer singer, int id)
        {
            if ((mState == null) || (singer == null))
            {
                return(new List <Singer>());
            }
            int pageSize = mState.PageSize;

            if (pageSize <= 0)
            {
                Console.WriteLine("The value of pageSize cannot be less than 0.");
                return(new List <Singer>());
            }

            IQueryable <Singer> totalSingers = GetAllSingersIQueryable(mState);

            if (totalSingers == null)
            {
                return(new List <Singer>());
            }

            List <Singer>       singers         = null;
            Singer              singerWithIndex = null;
            IQueryable <Singer> singersTempList = null;

            string orderByParam = mState.OrderBy.Trim();

            if (id >= 0)
            {
                // There was a singer selected
                singersTempList = totalSingers.Where(x => x.Id == id);
            }
            else
            {
                // No singer selected
                if (orderByParam == "")
                {
                    int sing_id = singer.Id;
                    singersTempList = totalSingers.Where(x => (x.Id == sing_id));
                }
                else if (orderByParam.Equals("SingNo", StringComparison.OrdinalIgnoreCase))
                {
                    string sing_no = singer.SingNo.Trim();
                    int    len     = sing_no.Length;
                    singersTempList = totalSingers.Where(x => x.SingNo.Trim().Substring(0, len) == sing_no);
                }
                else if (orderByParam.Equals("SingNa", StringComparison.OrdinalIgnoreCase))
                {
                    string sing_na = singer.SingNa.Trim();
                    int    len     = sing_na.Length;
                    singersTempList = totalSingers.Where(x => x.SingNa.Trim().Substring(0, len) == sing_na);
                }
                else
                {
                    // not inside range of roder by then return empty lsit
                    return(new List <Singer>());
                }
            }

            int totalRecords = totalSingers.Count();  // the whole singer table

            bool isFound = true;

            singerWithIndex = singersTempList.FirstOrDefault(); // the first one found
            if (singerWithIndex == null)
            {
                if (totalRecords == 0)
                {
                    // Singer Table is empty
                    UpdateStateOfRequest(mState, singerWithIndex, mState.CurrentPageNo, pageSize, 0, 0, true);
                    // return empty list
                    return(new List <Singer>());
                }
                else
                {
                    // go to last page
                    singerWithIndex = totalSingers.LastOrDefault();
                }
            }

            singer.CopyFrom(singerWithIndex);   // return to calling function

            // find the row number of singerWithIndex
            int tempCount = 0;

            foreach (var singerVar in totalSingers)
            {
                ++tempCount;    // first row number is 1
                if (singerVar.Id == singerWithIndex.Id)
                {
                    break;
                }
            }
            int pageNo = tempCount / pageSize;

            if ((pageNo * pageSize) != tempCount)
            {
                pageNo++;
            }

            int recordNo = (pageNo - 1) * pageSize;

            singers = totalSingers.Skip(recordNo).Take(pageSize).ToList();

            int totalPages = totalRecords / pageSize;

            if ((totalPages * pageSize) != totalRecords)
            {
                totalPages++;
            }

            if (isFound)
            {
                // found
                mState.OrgId = singer.Id; // chnaged OrgId to the singer id found
            }
            else
            {
                // not found, then it is last page and last record
                mState.OrgId = 0;   // no singer is selected
            }
            UpdateStateOfRequest(mState, singers.FirstOrDefault(), pageNo, pageSize, totalRecords, totalPages, true);

            return(singers);
        }