예제 #1
0
        public void _01_BooksAdded()
        {
            Assert.IsTrue(queryable.Any());

            Assert.IsTrue(queryable.Count() == 5);

            Console.WriteLine(queryable.ToList()
                              .Select(bk => bk.name + "\t" + bk.author + "\t" + bk.count
                                      + "\t" + bk.genre.Aggregate((a, b) => a + ", " + b)
                                      + "\t" + bk.year)
                              .Aggregate((a, b) => a + "\n" + b));
        }
예제 #2
0
        public PagedList(IMongoQueryable <T> superset, int pageNumber, int pageSize)
        {
            if (pageNumber < 1)
            {
                throw new ArgumentOutOfRangeException("pageNumber", pageNumber, "PageNumber cannot be below 1.");
            }
            if (pageSize < 1)
            {
                throw new ArgumentOutOfRangeException("pageSize", pageSize, "PageSize cannot be less than 1.");
            }

            TotalItemCount  = superset == null ? 0 : superset.Count();
            PageSize        = pageSize;
            PageNumber      = pageNumber;
            PageCount       = TotalItemCount > 0 ? (int)Math.Ceiling(TotalItemCount / (double)PageSize) : 0;
            HasPreviousPage = PageNumber > 1;
            HasNextPage     = PageNumber < PageCount;
            IsFirstPage     = PageNumber == 1;
            IsLastPage      = PageNumber >= PageCount;
            FirstItemOnPage = (PageNumber - 1) * PageSize + 1;
            var numberOfLastItemOnPage = FirstItemOnPage + PageSize - 1;

            LastItemOnPage = numberOfLastItemOnPage > TotalItemCount
                            ? TotalItemCount
                            : numberOfLastItemOnPage;


            if (superset != null && TotalItemCount > 0)
            {
                Subset.AddRange(pageNumber == 1
                    ? superset.Skip(0).Take(pageSize).ToList()
                    : superset.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList()
                                );
            }
        }
예제 #3
0
        private void Init(IMongoQueryable <T> source, int pageIndex, int pageSize, int?totalCount = null)
        {
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (pageSize <= 0)
            {
                throw new ArgumentException("pageSize must be greater than zero");
            }

            TotalCount = totalCount ?? source.Count();
            TotalPages = TotalCount / pageSize;

            if (TotalCount % pageSize > 0)
            {
                TotalPages++;
            }

            PageSize  = pageSize;
            PageIndex = pageIndex;
            source    = totalCount == null?source.Skip(pageIndex *pageSize).Take(pageSize) : source;

            AddRange(source);
        }
예제 #4
0
        public QueryResult <QueryContractList> ListContracts(string contractType, int?offset, int limit)
        {
            IMongoQueryable <CirrusContractTable> totalQuary = mongoDb.CirrusContractTable.AsQueryable()
                                                               .Where(q => q.ContractOpcode == "create" && q.ContractCodeType == contractType && q.Success == true);

            int total = totalQuary.Count();

            int itemsToSkip = offset ?? (total < limit ? 0 : total - limit);

            IMongoQueryable <CirrusContractTable> cirrusContract = mongoDb.CirrusContractTable.AsQueryable()
                                                                   .Where(q => q.ContractOpcode == "create" && q.ContractCodeType == contractType && q.Success == true)
                                                                   .OrderBy(b => b.BlockIndex)
                                                                   .Skip(itemsToSkip)
                                                                   .Take(limit);

            var res = cirrusContract.ToList();

            IEnumerable <QueryContractList> transactions = res.Select(item => new QueryContractList
            {
                ContractAddress  = item.NewContractAddress,
                ContractCodeType = item.ContractCodeType,
                Error            = item.Error,
                BlockIndex       = item.BlockIndex,
                TransactionId    = item.TransactionId
            });

            return(new QueryResult <QueryContractList>
            {
                Items = transactions,
                Offset = itemsToSkip,
                Limit = limit,
                Total = total
            });
        }
예제 #5
0
 public void SearchByTitle(string movieToSearch)
 {
     this.movieToSearch   = movieToSearch;
     exactInputMatchModel = (from item in collection.AsQueryable() where item.title == movieToSearch orderby item.title select item).Take(5);
     if (exactInputMatchModel.Count() == 0)
     {
         partialInputMatchModel = (from item in collection.AsQueryable() where item.title.Contains(movieToSearch) orderby item.title select item).Take(5);
     }
     ResponseHandler();
 }
예제 #6
0
        public void _06_IncrementBooksCount()
        {
            Console.WriteLine(queryable.ToList()
                              .Select(bk => bk.name + "\t" + bk.count)
                              .Aggregate((a, b) => a + "\n" + b));

            Console.WriteLine();

            var map = new BsonJavaScript(
                @"
                function()
                {
                    emit('a', this.count)
                }");

            var reduce = new BsonJavaScript(
                @"
                function(key, values)
                {
                    return Array.sum(values)
                }");

            var oldOverallCount = collection
                                  .MapReduce <ReduceResult <int> >(map, reduce)
                                  .Single().value;

            collection.UpdateMany(
                "{}",
                "{$inc: {count: 1}}");

            var newOverallCount = collection
                                  .MapReduce <ReduceResult <int> >(map, reduce)
                                  .Single().value;

            Assert.IsTrue(newOverallCount - oldOverallCount == queryable.Count());

            Console.WriteLine(queryable.ToList()
                              .Select(bk => bk.name + "\t" + bk.count)
                              .Aggregate((a, b) => a + "\n" + b));
        }
예제 #7
0
        public QueryResult <QueryContractCall> ContractCall(string address, string filterAddress, int?offset, int limit)
        {
            IMongoQueryable <CirrusContractTable> totalQuary = mongoDb.CirrusContractTable.AsQueryable()
                                                               .Where(q => q.ToAddress == address);

            if (filterAddress != null)
            {
                totalQuary = totalQuary.Where(q => q.FromAddress == filterAddress);
            }

            int total = totalQuary.Count();

            IMongoQueryable <CirrusContractTable> cirrusContract = mongoDb.CirrusContractTable.AsQueryable()
                                                                   .Where(q => q.ToAddress == address);

            if (filterAddress != null)
            {
                cirrusContract = cirrusContract.Where(q => q.FromAddress == filterAddress);
            }

            int itemsToSkip = offset ?? (total < limit ? 0 : total - limit);

            cirrusContract = cirrusContract
                             .OrderBy(b => b.BlockIndex)
                             .Skip(itemsToSkip)
                             .Take(limit);

            var res = cirrusContract.ToList();

            IEnumerable <QueryContractCall> transactions = res.Select(item => new QueryContractCall
            {
                Success         = item.Success,
                MethodName      = item.MethodName,
                ToAddress       = item.NewContractAddress,
                GasUsed         = item.GasUsed,
                GasPrice        = item.GasPrice,
                Amount          = item.Amount,
                ContractBalance = item.ContractBalance,
                FromAddress     = item.FromAddress,
                Error           = item.Error,
                BlockIndex      = item.BlockIndex,
                TransactionId   = item.TransactionId
            });

            return(new QueryResult <QueryContractCall>
            {
                Items = transactions,
                Offset = itemsToSkip,
                Limit = limit,
                Total = total
            });
        }
예제 #8
0
 //Validation's methods.
 #region VALIDATIONS
 //Method for email validation.
 public bool CheckEmailPerson(string email)
 {
     try
     {
         IMongoCollection <Person> col     = this.conn.GetCollection <Person>("persons");
         IMongoQueryable <Person>  persons = from person in col.AsQueryable <Person>() where person.Email == email select person;
         return(persons.Count() == 0);
     }
     catch (Exception)
     {
         return(false);
     }
 }
예제 #9
0
 //Methods of login.
 #region LOGIN
 //Login method.
 public int Login()
 {
     try
     {
         IMongoCollection <UserSys> col     = this.conn.GetCollection <UserSys>("usersys");
         IMongoQueryable <UserSys>  usersys = from x in col.AsQueryable <UserSys>() where x.Username == Hash.GenerateSHA512String(this.u.Username) && x.Password == Hash.GenerateSHA512String(this.u.Password) select x;
         return((usersys.Count() > 0) ? 1 : 0);
     }
     catch (Exception)
     {
         return(-1);
     }
 }
        public static PaginatedItems <T> Paginate <T>(this IMongoQueryable <T> source, int rowsPerPage = 0, int pageNumber = 1)
        {
            if (rowsPerPage == 0)
            {
                return(new PaginatedItems <T>
                {
                    PageCount = 1,
                    TotalItemsCount = source.Count(),
                    Items = source
                });
            }

            var skip       = Math.Max(0, pageNumber - 1) * rowsPerPage;
            var totalCount = source.Count();
            var pageCount  = (int)Math.Ceiling((double)totalCount / rowsPerPage);

            return(new PaginatedItems <T>
            {
                PageCount = pageCount,
                TotalItemsCount = totalCount,
                Items = source.Skip(skip).Take(rowsPerPage)
            });
        }
예제 #11
0
        /// <summary>
        /// 日志分页查询
        /// </summary>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">分页大小</param>
        /// <param name="func">lambda表达式</param>
        /// <param name="totalCount">总数</param>
        /// <returns>查询结果</returns>
        public List <T> GetPageList <T>(int pageIndex, int pageSize, Expression <Func <T, bool> > func, out int totalCount)
            where T : Model.BaseInfo
        {
            IMongoCollection <T> mongoCollection = this.GetCollection <T>();

            IMongoQueryable <T> mongoQueryable = mongoCollection.AsQueryable();

            if (func != null)
            {
                mongoQueryable = mongoQueryable.Where(func);                 //.AsQueryable();
            }
            totalCount = mongoQueryable.Count();

            return(mongoQueryable
                   .OrderByDescending(m => m.Time)
                   .Skip((pageIndex) * pageSize).Take(pageSize)
                   .ToList());
        }
예제 #12
0
 public int Count(Expression <Func <T, bool> > predicate)
 {
     return(collectionQueryable.Count(predicate));
 }