我正在寻找一种顺序获取项目列表的方法,这意味着每次调用都会按顺序检索一组数据库值。
好的,那不是很清楚,所以让我告诉你。
假设我有200个具有日期属性的对象条目,每个条目都从2月初到今天输入。
我的第一个电话将检索一组20个最新的条目,然后下一个电话将检索条目21-40,然后下一个电话41-60,依此类推,只要有数据可以获得。
我正在使用C#/ Entity Framework并且熟悉Linq和LinqKit,但这对我来说是一个新的挑战,并且我会接受任何建议!
编辑好的,根据评论,我的例子还不够。
所以让我们说200而不是200我有200万条参赛作品,而且还有更多参赛作品。但是,正如我所提到的,我只是想加载前20个,然后是每个电话接下来的20个,但我不知道知道用户拨打电话的次数,这就是我无法“调整”Take(20)
次呼叫的原因,因为这是动态的。
EDIT2
以下是一些代码示例,可以指导您和我的工作:)
List<Book> listBooks = (from b in DbContext.Books
orderby b.DateAdded
select b).Take(count).ToList();
请注意,这段代码并不完美,因为它总会返回添加的20本最新书。但是在第二次通话时我想要下一个20,然后在第三个电话上看41-60本书,依此类推。
EDIT3
经过一些研究,我发现了一些可能符合我需求的东西:
但是,我需要解决一些问题,找出如何使这项工作。
答案 0 :(得分:2)
如果它们只有200,我建议你只用一个查询来获取数据库的所有数据。
然后存储在例如列表中,然后执行类似的操作。
list = list.OrderByDescending(x => x.Name).ToList();
然后获得前20个元素:
var result = list.Take(20);
获得21-40:
var result = list.Skip(20).Take(20);
这种方式如果您想要更多或更少的内容,您只需要在变量中转换20;)
我希望这会有所帮助
答案 1 :(得分:1)
正如所提到的,使用skip()
和take()
以及变量来实现您的目标:
var numberOfBooksToGrab = 20;
var numberOfTimesYouHaveGrabbedBooks = 0;
List<Book> listBooks = (from b in DbContext.Books
orderby b.DateAdded
select b).Skip(numberOfBooksToGrab * numberOfTimesYouHaveGrabbedBooks)
.Take(numberOfBooksToGrab)
.ToList();
每次拨打电话时,您显然需要更新numberOfTimesYouHaveGrabbedBooks
变量,但这对您来说应该很容易(并且取决于项目的其余部分是如何构建的)。