コード例 #1
0
ファイル: Storage.cs プロジェクト: Stelmashenko-A/CourseWork
 public Page GetUserLine(long userId, int pageIndex, int pageSize, long pageHeaderId = long.MaxValue)
 {
     var following = GetFollowing(userId);
     using (new TransactionScope())
     {
         using (var session = _store.OpenSession())
         {
             var skipCounter = 0;
             if (pageHeaderId != -1)
             {
                 skipCounter = session.Query<TwitterStatus>()
                     .Count(status => status.InternalId > pageHeaderId);
             }
             var t = session.Query<TwitterStatus>().OrderByDescending(x => x.CreatedAt)
                 .Where(status => status.UserIdStr.In(following))
                 .Skip(skipCounter)
                 .Take(pageSize).ToList();
             var page = new Page(t);
             return page;
         }
     }
 }
コード例 #2
0
ファイル: Storage.cs プロジェクト: Stelmashenko-A/CourseWork
        public Page GetPageBefore(long userId, int pageIndex, int pageSize, long pageHeaderId = 0)
        {
            var following = GetFollowing(userId);
            using (new TransactionScope())
            {//problem in logic
                using (var session = _store.OpenSession())
                {
                    var skipCounter = 0;
                    if (pageHeaderId != -1)
                    {
                        skipCounter = session.Query<TwitterStatus>()
                            .Count(status => status.InternalId > pageHeaderId);
                        skipCounter -= (pageIndex + 1) * pageSize;
                    }
                    if (skipCounter < -pageSize)
                    {
                        return  new Page(new List<TwitterStatus>());
                    }
                    if (skipCounter < 0)
                    {
                        var f = session.Query<TwitterStatus>().OrderByDescending(x => x.CreatedAt)
                        .Where(status => status.UserIdStr.In(following))
                        .Take(pageSize+skipCounter)
                        .ToList();
                        return new Page(f);

                    }
                    var r = session.Query<TwitterStatus>()
                        .Where(status => status.InternalId > pageHeaderId && status.UserIdStr.In(following)).OrderByDescending(x => x.CreatedAt, new DateTimeComparer()).Skip(pageIndex * pageSize)
                        .Take(pageSize).ToList();
                    var t = session.Query<TwitterStatus>().OrderByDescending(x => x.CreatedAt)
                        .Where(status => status.UserIdStr.In(following))
                        .Skip(skipCounter)
                        .Take(pageSize)
                        .ToList();
                    var page = new Page(t);
                    return page;
                }
            }
        }