C# 要查看的LINQ结果
向视图返回LINQ查询结果的简单方法是什么 我的控制器中有一个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
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()”,以仅获取一个对象。