2014-11-14 3 views
1

Что такое простой способ вернуть результат запроса LINQ к представлению?Результат 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; }   
} 

Edit:

Чтобы быть ясным, прежде чем даже будучи в состоянии вернуть результат в запросе LINQ к тем, я должен исправить ошибку, которая происходит выполнение запроса в моем цикле Еогеасп:

LINQ к Entities не распознает метод «Int32 ToInt32 (System.Object)» метод, и этот метод не может быть переведен в магазин выражение

ответ

1

Вы должны заменить return View(); с return View(model);.

Несколько перегрузок Controller.View method доступны для поддержки, указав столько, сколько вам нужно, чтобы вернуть ViewResult, который вы желаете. В этом случае вам нужна перегрузка Controller.View(Object), а не без параметров Controller.View() перегрузка; Параметр Object первого заключается в том, чтобы указать модель, на которой вы хотели бы использовать возвращаемый ViewResult.

+0

Сделал это, но я получил эту ошибку в своем foreach. LINQ to Entities не распознает метод 'Int32 ToInt32 (System.Object)', и этот метод не может быть переведен в выражение хранилища. –

+0

Это [совершенно другой вопрос] (http://stackoverflow.com/q/10117681/1810429) ... [на который уже был дан ответ на SO] (http://stackoverflow.com/a/10117941/1810429). (В принципе, добавьте '.Value' в конец каждого оператора в' foreach'.) – J0e3gan

+0

Я не могу .. нет метода .Value. –

0

Я получил эту ошибку в своем foreach.

LINQ к 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 должна иметь коллекцию проектов вместо одного проекта.
+0

@D Stanley 1) Да, я просто скопирую код кода для запроса проекта, когда он работает. 2) Я все равно получаю 1 результат. Знать более эффективный способ? Благодарим за ответ. Редактировать: получена ошибка, указывающая на первый оператор моего foreach Ссылка на объект не установлена ​​в экземпляр объекта. –

+0

Добавьте '.Single() 'после вашего запроса, чтобы получить только один объект. –

Смежные вопросы