通过LINQ

时间:2018-02-01 15:40:42

标签: asp.net asp.net-mvc

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

 public class BasicAccountView
{

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

}

以下是我的登录代码,我在各自的会话变量中都有名称 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();
        }
    }

登录代码一切正常并开始运行,即使会话工作正常,他们正在检索登录用户的名称。虽然,情况就像,我需要加入此帐户和基本表,以便我可以从 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>


}

更新 - 问题已解决 只需将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);
    }

1 个答案:

答案 0 :(得分:0)

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

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