C# 要查看的LINQ结果

C# 要查看的LINQ结果,c#,asp.net-mvc,linq,entity-framework,razor,C#,Asp.net Mvc,Linq,Entity Framework,Razor,向视图返回LINQ查询结果的简单方法是什么 我的控制器中有一个LINQ查询,它从数据库中获取一个结果,但我对如何将其返回到视图有点不知所措 控制器: public ActionResult Index() { if (Session["UserId"] == null) { return RedirectToAction("Index", "Login"); } else { EmployeeHomeViewMode

向视图返回LINQ查询结果的简单方法是什么

我的控制器中有一个LINQ查询,它从数据库中获取一个结果,但我对如何将其返回到视图有点不知所措

控制器:

public ActionResult Index()
{
    if (Session["UserId"] == null)
    {
        return RedirectToAction("Index", "Login");
    }
    else
    {    
        EmployeeHomeViewModel model = new EmployeeHomeViewModel();

        var UserId = from x in db.Employees
                     where x.Employee_Id == Convert.ToInt32(Session["UserId"])
                     select x;

        //DISPLAY RESULT       

        var project = from x in db.Projects
                      where x.Employee_Id == Convert.ToInt32(Session["UserId"])
                      select x;
        foreach (Project result in project)
        {
            model.Project.Project_Id = result.Project_Id;
            model.Project.Project_Name = result.Project_Name;
            model.Project.Project_Detail = result.Project_Detail;             
        }

        //DISPLAY RESULT

    }

    return View();
}
@model ProjectManager.ViewModels.EmployeeHomeViewModel
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<div>Hello, @Html.DisplayFor(model => model.Employee.Employee_FirstName)</div><br />
<div>Current project: @Html.DisplayFor(model => model.Project.Project_Id)</div><br />
<div>Project name: @Html.DisplayFor(model => model.Project.Project_Name)</div><br />
<div>Details: @Html.DisplayFor(model => model.Project.Project_Detail)</div><br />
public class EmployeeHomeViewModel
{
    public Employee Employee { get; set; }
    public Project Project { get; set; }        
}
查看:

public ActionResult Index()
{
    if (Session["UserId"] == null)
    {
        return RedirectToAction("Index", "Login");
    }
    else
    {    
        EmployeeHomeViewModel model = new EmployeeHomeViewModel();

        var UserId = from x in db.Employees
                     where x.Employee_Id == Convert.ToInt32(Session["UserId"])
                     select x;

        //DISPLAY RESULT       

        var project = from x in db.Projects
                      where x.Employee_Id == Convert.ToInt32(Session["UserId"])
                      select x;
        foreach (Project result in project)
        {
            model.Project.Project_Id = result.Project_Id;
            model.Project.Project_Name = result.Project_Name;
            model.Project.Project_Detail = result.Project_Detail;             
        }

        //DISPLAY RESULT

    }

    return View();
}
@model ProjectManager.ViewModels.EmployeeHomeViewModel
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<div>Hello, @Html.DisplayFor(model => model.Employee.Employee_FirstName)</div><br />
<div>Current project: @Html.DisplayFor(model => model.Project.Project_Id)</div><br />
<div>Project name: @Html.DisplayFor(model => model.Project.Project_Name)</div><br />
<div>Details: @Html.DisplayFor(model => model.Project.Project_Detail)</div><br />
public class EmployeeHomeViewModel
{
    public Employee Employee { get; set; }
    public Project Project { get; set; }        
}
编辑:

public ActionResult Index()
{
    if (Session["UserId"] == null)
    {
        return RedirectToAction("Index", "Login");
    }
    else
    {    
        EmployeeHomeViewModel model = new EmployeeHomeViewModel();

        var UserId = from x in db.Employees
                     where x.Employee_Id == Convert.ToInt32(Session["UserId"])
                     select x;

        //DISPLAY RESULT       

        var project = from x in db.Projects
                      where x.Employee_Id == Convert.ToInt32(Session["UserId"])
                      select x;
        foreach (Project result in project)
        {
            model.Project.Project_Id = result.Project_Id;
            model.Project.Project_Name = result.Project_Name;
            model.Project.Project_Detail = result.Project_Detail;             
        }

        //DISPLAY RESULT

    }

    return View();
}
@model ProjectManager.ViewModels.EmployeeHomeViewModel
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<div>Hello, @Html.DisplayFor(model => model.Employee.Employee_FirstName)</div><br />
<div>Current project: @Html.DisplayFor(model => model.Project.Project_Id)</div><br />
<div>Project name: @Html.DisplayFor(model => model.Project.Project_Name)</div><br />
<div>Details: @Html.DisplayFor(model => model.Project.Project_Detail)</div><br />
public class EmployeeHomeViewModel
{
    public Employee Employee { get; set; }
    public Project Project { get; set; }        
}
要明确的是,在能够将LINQ查询的结果返回到视图之前,我必须修复在foreach循环中执行查询时出现的错误:

LINQ to Entities无法识别方法“Int32到Int32(System.Object)”方法,并且无法将此方法转换为存储表达式


您应该替换
返回视图()带有
返回视图(模型)

的多个重载可用于支持指定返回所需的
ViewResult
。在这种情况下,您需要
Controller.View(Object)
重载,而不是无参数
Controller.View()
重载;前者的
对象
参数用于指定返回的
视图结果
所基于的模型

我在我的字典里发现了这个错误

LINQ to Entities无法识别方法
'Int32 to Int32(System.Object)
方法,并且无法将此方法转换为存储表达式

EF不直接支持
Convert.ToInt32()
方法。在您的情况下,这是一个非常简单的修复-只需在查询外部转换会话变量(并重用它):

我还看到了其他一些事情:

  • 您根本没有使用
    UserId
    查询
  • 您正在迭代
    项目
    查询的结果,但每次都覆盖相同的值。我怀疑你的
    EmployeeHomeViewModel
    模型应该有一个项目集合,而不是一个项目

是这样做的,但我的foreach中出现了这个错误。LINQ to Entities无法识别方法“Int32到Int32(System.Object)”方法,并且无法将此方法转换为存储表达式。即。。。。(基本上,将
.Value
添加到
foreach
中每个语句的末尾)我不能。。没有.Value方法。@RoyalFlash:是的,很抱歉,我的评论中的链接问答太快地映射到您的情况。相关问答仍然相关;但你需要像@StanleyD建议的那样利用它们。否则,您仍然需要返回一个基于
模型的
ViewResult
,正如我当然回答的那样。@D Stanley 1)是的,我只是在项目查询工作时复制粘贴代码。2) 无论如何,我只得到一个结果。知道更有效的方法吗?谢谢你的回答。。编辑:指向未设置为对象实例的my foreach对象引用的第一条语句时出错。请在查询后添加“.Single()”,以仅获取一个对象。