通过LINQ从其他表中检索登录用户的数据

问题描述 投票:0回答:1

这是我的ViewModel,我添加了两个表。 Account_Detail(即时从此表登录)。 Basic_Detail(我需要在用户登录后通过Session从该表中检索数据)

 public class BasicAccountView
{

    public Account_Details Account_Details { get; set; }
    public Basic_Details Basic_Details { get; set; }

}

这是我的登录代码,我在各自的Session变量中都有Name和ID

public ActionResult Index(Account_Details log)
    {

        var obj = db.Account_Details.Where(u => u.Name.Equals(log.Name) && u.Password.Equals(log.Password)).FirstOrDefault();
        Session["Account"] = log;

        if (obj != null)
        {

            Session["loginid"] = obj.U_ID;
            Session["name"] = obj.Name;
            Session["email"] = obj.Email;
            return RedirectToAction("Verify");
        }

        else
        {
            return View();
        }
    }

登录代码一切正常并开始运行,即使Session工作正常,他们也正在检索登录用户的名称。虽然,情况就像,我需要加入此帐户和基本表,以便我可以从Basic_Detail表获取登录用户的详细信息。这是我的连接查询,但它不起作用,根本没有显示任何内容。

public ActionResult Verify()
    {
        var Result = (from o in db.Basic_Details
                      join od in db.Account_Details on o.User_ID equals od.U_ID
                      where o.FirstName == this.HttpContext.User.Identity.Name
                      select new BasicAccountView { Basic_Details = o, Account_Details = od }).ToList();
        //var Result = (from o in db.Basic_Details
        //              join od in db.Account_Details on o.User_ID equals od.U_ID
        //              select new Basic_Details { FirstName = od.Name }).ToList();

        return View(Result);
    }

验证操作的视图

@model IEnumerable<Matrimonial.Models.BasicAccountView>

@{
ViewBag.Title = "Verify";
Layout = "~/Views/Shared/Main.cshtml";
}
<p>
@Html.ActionLink("Create New", "Create")
</p>

@foreach(var item in Model)
{
 <td>@item.Basic_Details.FirstName</td>
 <td>@item.Basic_Details.LastName</td>
 <td>@item.Basic_Details.MaritalStatus</td>
 <td>@item.Basic_Details.Religion</td>


}

UPDATE - ISSUE RESOLVED只需将Session [“loginid”]添加到其他变量中,并将其与要从中检索数据的其他表UserID进行比较。我希望它能帮助其他人解决同样的问题。

public ActionResult Verify()
    {
        BasicAccountView bav = new BasicAccountView();
        int userId = (int)Session["loginid"];
        var Result = from o in db.Basic_Details
                     join od in db.Account_Details on o.User_ID equals od.U_ID
                     where o.User_ID == userId
                     select new BasicAccountView { Basic_Details = o, Account_Details = od };
        //var Result = (from o in db.Basic_Details
        //              join od in db.Account_Details on o.User_ID equals od.U_ID
        //              select new Basic_Details { FirstName = od.Name }).ToList();

        return View(Result);
    }
asp.net asp.net-mvc
1个回答
0
投票

你应该检查“this.HttpContext.User.Identity.Name”的实际值,这可能是问题所在。此外,检查JOIN查询是否返回任何结果(排除WHERE子句)。

我希望它能给你一个线索。

© www.soinside.com 2019 - 2024. All rights reserved.