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