コード例 #1
0
        public void TestSkipAndTake()
        {
            string storeName = Guid.NewGuid().ToString();
            var dataObjectStore = _dataObjectContext.CreateStore(storeName);
            var context = new MyEntityContext(dataObjectStore);
            var people= new Person[10];
            for(int i = 0; i < 10; i++)
            {
                var person = new Person {Age = 40 - i, Name = "Person #" + i};
                context.Persons.Add(person);
                people[i] = person;
            }
            context.SaveChanges();

            dataObjectStore = _dataObjectContext.OpenStore(storeName);
            context = new MyEntityContext(dataObjectStore);
            
            // Take, skip and skip and take with no other query expression
            var top3 = context.Persons.Take(3).ToList();
            Assert.AreEqual(3, top3.Count);
            foreach(var p in top3)
            {
                Assert.IsTrue(people.Any(x=>p.Id.Equals(x.Id)));
            }
            var after3 = context.Persons.Skip(3).ToList();
            Assert.AreEqual(7, after3.Count);
            var nextPage = context.Persons.Skip(3).Take(3).ToList();
            Assert.AreEqual(3, nextPage.Count);

            // Combined with a sort expression
            var top3ByAge = context.Persons.OrderByDescending(p => p.Age).Take(3).ToList();
            Assert.AreEqual(3, top3ByAge.Count);
            foreach(var p in top3ByAge) Assert.IsTrue(p.Age >= 38);

            var allButThreeOldest = context.Persons.OrderByDescending(p => p.Age).Skip(3).ToList();
            Assert.AreEqual(7, allButThreeOldest.Count);
            foreach(var p in allButThreeOldest) Assert.IsFalse(p.Age >= 38);

            var nextThreeOldest = context.Persons.OrderByDescending(p => p.Age).Skip(3).Take(3).ToList();
            Assert.AreEqual(3, nextThreeOldest.Count);
            foreach(var p in nextThreeOldest) Assert.IsTrue(p.Age < 38 && p.Age > 34);
        }