Какой простой способ вернуть результат запроса 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; }
}
Редактировать:
Чтобы быть ясным, прежде чем даже вернуть результат запроса LINQ в представление, я должен исправить ошибку, которая возникает при выполнении запроса в моем цикле foreach:
LINQ to Entities не распознает метод "Int32 ToInt32 (System.Object)", и этот метод не может быть переведен в выражение хранилища
Вы должны заменить return View();
с return View(model);
,
Несколько перегрузок метода Controller.View
доступны для поддержки, указав столько, сколько вам нужно, чтобы вернуть ViewResult
. В этом случае вам нужна перегрузка Controller.View(Object)
а не Controller.View()
перегрузка Controller.View()
; параметр Object
первого - это указать модель, на которой вы хотите ViewResult
возвращаемый ViewResult
.
Я получил эту ошибку в своем foreach.
LINQ to Entities не распознает метод
'Int32 ToInt32(System.Object)'
, и этот метод не может быть переведен в выражение хранилища
EF напрямую не поддерживает метод Convert.ToInt32()
. В вашем случае это достаточно простое исправление - просто преобразуйте переменную сеанса за пределы запроса (и повторно используйте его):
int userID = Convert.ToInt32(Session["UserId"]);
//DISPLAY RESULT
var project = from x in db.Projects
where x.Employee_Id == userID
select x;
Несколько других вещей, которые я вижу:
UserId
вообщеproject
но каждый раз переписываете одинаковые значения. Я подозреваю, что ваша модель EmployeeHomeViewModel
должна иметь коллекцию проектов вместо одного проекта.
.Value
в конец каждого оператора в вашемforeach
.)