如何使用会话将 LINQ 查询结果发送到另一个页面

本文关键字:另一个 结果 会话 何使用 LINQ 查询 | 更新日期: 2023-09-27 18:32:08

>我阅读了如何将查询结果转换为列表。但它不起作用,或者我不知道如何在我的情况下使用它。

的情况是,当用户写电子邮件和密码时,我有登录页面,应用程序根据电子邮件和密码获取数据。

protected void lbtnSignIn_Click(object sender, EventArgs e)
{
    try
    {
         SiteDataContext dc = new SiteDataContext();
         Session["UserData"] = from data in dc.Users
                                  where data.Email.Equals(txtEmail.Text.ToString()) &&
                                      data.Password.Equals(txtPassword.Text.ToString())
                                  select data; 
        Response.Redirect("SignIn.aspx");
    }
    catch(Exception exp)
    {
         lblMessage.Visible = true;
         lblMessage.Text = exp.Message;
    }
}

我将 LINQ 查询结果保存在Session["UserData"]并重定向到另一个页面。在第二页上,我想获取会话结果并在页面上显示用户数据。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        var data = Session["UserData"];
        lblName.Text = data.Name;
    }
}

我无法从对象数据中获取数据。它给了我下面的错误

对象不包含"名称"的定义,也没有扩展名 接受类型为"对象"的第一个参数的方法"名称"可以是 找到(是否缺少指令或程序集引用?

只是我想在另一个网页上显示登录用户的数据。请帮忙。

如何使用会话将 LINQ 查询结果发送到另一个页面

存储在会话中的内容被键入为对象。您需要通过将列表强制转换为正确的类型来告诉编译器您期望的类型来帮助编译器。linq 查询还返回用户列表,因此调用 .名单上的名字毫无意义。假设 dc.Users 包含一个名为 User 的对象列表您可以使用以下内容检索列表。

var data = (IEnumerable<User>)Session["UserData"];

然后可以使用

foreach(var u in data) System.Console.WriteLine(u.Name);

但是,查看代码,我想您实际尝试做的事情更像。

您希望在会话变量中找到的第一个用户。然后,您需要将 linq 代码更改为。

Session["UserData"] = (from data in dc.Users
                                  where data.Email.Equals(txtEmail.Text.ToString()) &&
                                  data.Password.Equals(txtPassword.Text.ToString())
                                  select data).FirstOrDefault(); 

并从会话中检索它并使用

var data = (User)Session["UserData"];
lblName.Text = data.Name;

您应该在存储到会话之前执行查询。请考虑改用 HttpContext.Items。项目将持续一个请求。使会话膨胀不好。

您可以使用.ToList()甚至.FirstOrDefault()取决于结果来执行查询。

Session["UserData"] = (from data in dc.Users
                       where data.Email.Equals(txtEmail.Text.ToString()) &&
                           data.Password.Equals(txtPassword.Text.ToString())
                       select data).FirstOrDefault(); 

请将您的上下文包围在using块中,以便在使用后处理您的上下文。

using(var dc = new SiteDataContext()) {
    Session["UserData"] = (from data in dc.Users
                           where data.Email.Equals(txtEmail.Text.ToString()) &&
                               data.Password.Equals(txtPassword.Text.ToString())
                           select data).FirstOrDefault(); 
}