如何使用相同的查询有随机值后,我点击下一个按钮
本文关键字:按钮 下一个 随机 何使用 查询 | 更新日期: 2023-09-27 18:17:01
现在的问题是我有那个查询
var question = _repository.tbl_TestQuestion
.Where(x => x.nCourseId == courseId && x.nChapterId == chapterId && x.bActive == true)
.OrderBy(x => Guid.NewGuid()).Take(10).ToList();
当我点击下一个按钮到下一个问题时它会再次随机查询我不需要再次随机我只需要它从已经随机的10个问题中进行选择
有什么帮助吗
您可以在页面的'Page_Load '中查看Session
。如果不存在,创建一个新的Guid,否则从会话中获取Guid。
public string myGuid;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["guid"] == null)
{
myGuid = Guid.NewGuid().ToString();
Session["guid"] = myGuid;
}
else
{
myGuid = Session["guid"].ToString();
}
}
现在你可以在页面的任何地方使用Guid。
var question = _repository.tbl_TestQuestion
.Where(x => x.nCourseId == courseId && x.nChapterId == chapterId && x.bActive == true)
.OrderBy(x => myGuid).Take(10).ToList();
似乎由Guid
存储为变量的排序不工作.OrderBy(x => myGuid)
。甚至在解析myGuid
变量.OrderBy(x => Guid.Parse(myGuid))
时也没有。
您可以在初始排序后将整个tbl_TestQuestion
存储为会话并重新使用,或者在从数据库加载问题时随机排序(如果您使用一个)
public _repository.tbl_TestQuestion questionList;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["question"] == null)
{
questionList = _repository.tbl_TestQuestion
.Where(x => x.nCourseId == courseId && x.nChapterId == chapterId && x.bActive == true)
.OrderBy(x => Guid.NewGuid()).Take(10).ToList();
Session["question"] = questionList;
}
else
{
questionList = Session["question"] as _repository.tbl_TestQuestion;
}
}
我会把上面的两个答案结合起来:
- 检查会话GUID是否存在(如答案#1)
- 如果是,那么访问/返回存储在会话 中的Enumerable。
- 如果没有,那么生成/存储新的会话GUID,然后创建/存储可枚举的(如答案#2)
也许你可以在会话中存储你的enumerable ?
IEnumerable<tbl_TestQuestion> question = _repository.tbl_TestQuestion
.Where(x => x.nCourseId == courseId && x.nChapterId == chapterId && x.bActive == true)
.OrderBy(x => Guid.NewGuid())
.Take(10)
.ToList();
Session["SessionQuestions"] = question;
您可以再次使用它来访问另一个问题