对随机项数据集进行分页

时间:2009-05-25 05:26:11

标签: linq-to-sql random pagination

我必须在网站上生成一个项目列表,这些项目对于该特定项目列表的用户会话是随机的。

我要添加一个链接来演示问题。 WebSite Link

方案: 当用户进入并点击链接时,页面上的项目应随机化。当用户点击第二页,第三页时,它应该遵循它第一次生成的相同随机模式,这样当我返回到第一页时,该页面上的项目将与用户第一次点击时相同。链接。

我确实考虑过随机化一次所有项目的数据集,并将它们保持在会话中,但这是最后的选择。

1 个答案:

答案 0 :(得分:1)

1)您的随机数发生器必须是可重复的:通过为每个用户使用唯一种子并使用Random()类,您可以生成相同的随机数序列  跨多个HTTP请求。但是,您必须将种子存储在某处(我建议使用cookie或隐藏的输入元素)。

public Random GetGenerator() {
DateTime now = new DateTime();
long ticks = now.Ticks();

if(getCookie("ticks") > 0) {
// existing user:
ticks = getCookie("ticks"); // you must implement this to get the user's seed
} else {
// new user:
setCookie(now.Ticks()); // you must implement this to set a Cookie/input field value
}

return new Random(ticks);
}

2)您必须生成M *(N-1)个数字才能最终到达页面N的随机数,其中M是每页的项目数。只有这样才能开始为请求的页面生成随机数。