C# 单击“下一步”按钮后,如何使用具有随机值的同一查询

C# 单击“下一步”按钮后,如何使用具有随机值的同一查询,c#,asp.net,entity-framework,linq,C#,Asp.net,Entity Framework,Linq,现在的问题是我有这个疑问 var question = _repository.tbl_TestQuestion .Where(x => x.nCourseId == courseId && x.nChapterId == chapterId && x.bActive == true) .OrderBy(x => Guid.NewGuid()).Take(10).ToList(); 当我点击下一个问题的“下一步”按钮时,它会再次随机查

现在的问题是我有这个疑问

var question = _repository.tbl_TestQuestion
    .Where(x => x.nCourseId == courseId && x.nChapterId == chapterId && x.bActive == true)
    .OrderBy(x => Guid.NewGuid()).Take(10).ToList();
当我点击下一个问题的“下一步”按钮时,它会再次随机查询我不需要再次随机,我只需要从我已经随机选择的10个问题中进行选择


那么您是否可以在会话中存储您的可枚举项

        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;
IEnumerable question=\u repository.tbl\u TestQuestion
.Where(x=>x.nCourseId==courseId&&x.nChapterId==chapterId&&x.bActive==true)
.OrderBy(x=>Guid.NewGuid())
.Take(10)
.ToList();
会话[“会话问题”]=问题;

您可以再次使用它访问另一个问题。

也许您可以在会话中存储您的可枚举项

        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;
IEnumerable question=\u repository.tbl\u TestQuestion
.Where(x=>x.nCourseId==courseId&&x.nChapterId==chapterId&&x.bActive==true)
.OrderBy(x=>Guid.NewGuid())
.Take(10)
.ToList();
会话[“会话问题”]=问题;

您可以再次使用它访问另一个问题。

您可以在页面的“页面加载”中检查
会话。如果它不存在,请创建新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
存储为一个会话,然后重复使用该会话,或者在从数据库加载问题时随机排序(如果使用)


您可以在页面的“页面加载”中检查
会话。如果它不存在,请创建新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
存储为一个会话,然后重复使用该会话,或者在从数据库加载问题时随机排序(如果使用)


我会结合以上两个答案:

  • 检查会话GUID是否存在(如回答#1所示)
  • 如果是,则访问/返回会话中存储的可枚举项
  • 如果没有,则生成/存储新的会话GUID,然后创建/存储可枚举项(如答案#2所示)

我将结合以上两个答案:

  • 检查会话GUID是否存在(如回答#1所示)
  • 如果是,则访问/返回会话中存储的可枚举项
  • 如果没有,则生成/存储新的会话GUID,然后创建/存储可枚举项(如答案#2所示)

下一步按钮,下一个问题。。。。什么时候,怎样?我们只看到一系列随机排列的问题。没有任何明显执行某些导航过程的代码。下一个按钮,下一个问题。。。。什么时候,怎样?我们只看到一系列随机排列的问题。没有任何明显执行某些导航过程的代码。如何将会话的值设置为常量,因为每次他运行问题查询并更改会话的值时,我需要在第一次填充会话的值如何将会话的值设置为常量,因为每次他都会运行问题查询并更改会话的值,所以我需要第一次填充会话的值。现在,当我使用orderBy(x=>Guid.New())时,var问题查询不会随机使用orderBy(x=>myGuid),但当使用orderBy(x=>myGuid)时,它是随机的它不是随机的谢谢你的黄金努力帮助我,你最近的更新是工作的,我感谢你的帮助THx VDWWDNow var问题查询不随机与orderBy(x=>myGuid)当我使用orderBy(x=>Guid.New())它是随机的,但当使用orderBy(x=>myGuid)它不是随机的谢谢你的黄金努力帮助我,您最近的更新正在运行,我感谢您的帮助THx VDWWD