2016-08-20 107 views
1

我想從我的控制器傳遞數據以查看。 這裏是控制器的代碼如何通過自定義查詢結果在asp.net中查看

public ActionResult AllCars() 
    { 
     try 
     { 
      int id = System.Web.HttpContext.Current.User.Identity.GetUserId<int>(); 


      var reservedCars = (from c in db.Cars 

          join o in db.Orders on c.Car_Id equals o.Car_Id 
          join u in db.AspNetUsers on o.Id equals u.Id 
          where u.Id == 5 
          select new 
          { 
           c.Car_Description, 
           c.Car_Id, 
           c.CarMakeId, 
           c.CarModelId, 
           c.Reservation_Status, 
           c.Color 
          }); 

     return View(reservedCars); 
    } 
    catch (Exception) 
    { 

     throw; 
    } 
} 

這裏是我的觀點文件。

@model IEnumerable<FinalProject.Models.ReservedCar> 



<table> 
    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Car_Id); 
      </td> 
     </tr> 
    } 
    </table> 

但是當我跑我認爲我得到了以下錯誤 傳遞到字典的模型項的類型爲「System.Data.Entity.Infrastructure.DbQuery但本詞典需要類型的模型項目」系統.Collections.IEnumerable'

我知道即時傳遞dbquery結果來查看和我的看法是期待它將iEnumerable。 請指導我如何實現這項任務。?我只是想將查詢結果傳遞給我的視圖,並希望使用它。

ModelClass。 ReservedCar.cs

namespace FinalProject.Models 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.Data.Entity.Spatial; 

    public partial class ReservedCar 
    { 

     public int Id { get; set; } 

     public string Car_Description { get; set; } 

     public int Car_Id { get; set; } 

     public string CarMakeId { get; set; } 

     public string CarModelId { get; set; } 
     public string Reservation_Status { get; set; } 

     public string Color { get; set; } 
    } 
} 
+0

結束與'查詢重做代碼。 ToList()'或傳遞給視圖'reservedCars.ToList()' –

回答

3

reservedCars目前仍然是IQueryable類型的查詢表達式。尚未評估/執行。因此,reservedCars的類型與您的視圖強類型爲(IEnumerable<ReservedCar>)的類型不同。這就是你得到類型不匹配錯誤的原因。

請確保您返回的是ReservedCar類的集合。您可以更新LINQ表達式的投影部分,以將結果投影到ReservedCar而不是匿名對象。同時在查詢中調用ToList()方法,該方法將執行查詢表達式並返回結果。

var reservedCars = (from c in db.Cars 

          join o in db.Orders on c.Car_Id equals o.Car_Id 
          join u in db.AspNetUsers on o.Id equals u.Id 
          where u.Id == 5 
          select new ReservedCarVm 
          { 
           CarId = c.Car_Id, 
           Description = c.Car_Description, 
           Color = c.Color 
           // Map other properties as needed. 
          }).ToList(); 
return View(reserverCars); 

假設你ReservedCarVm類有ColorCar_DescriptionCar_Id性質是類似下面

public class ReservedCarVm 
{ 
    public string Color { set;get;} 
    public string Description { set;get;} 
//Add other properties needed by the view here 
} 

現在確保你的看法是強類型的集合類型相同那些在Car實體類的這個視圖模型類

@model IEnumerable<ReserverdCarVm> 
@foreach(var item in Model) 
{ 
    <p>@item.CarId</p> 
    <p>@item.Color</p> 
} 
+0

仍然在控制器中出錯。 'FinalProject.Models。ReservedCar'不能在LINQ to Entities查詢中構造。 答案已更新。請檢查我的模型類。 –

+0

你有一個叫ReserverCar的類嗎?它看起來像什麼?它有和我們使用的相同的性能嗎? – Shyju

+0

檢查我的模型類在更新的問題。是的,它擁有所有這些屬性。 –

0

你可以這樣做:

相反@model的IEnumerable的< FinalProject.Models.ReservedCar>
你可以做@model的IQueryable < FinalProject.Models.ReservedCar>

以上不建議,你不應該直接從視圖調用數據庫,我沒有看到有任何理由這樣做。

還需要處置的DbContext,在你提供的代碼,你是不是配置的dbconext這是不好的

只憑這

var reservedCars = (from c in db.Cars 

          join o in db.Orders on c.Car_Id equals o.Car_Id 
          join u in db.AspNetUsers on o.Id equals u.Id 
          where u.Id == 5 
          select new 
          { 
           c.Car_Description, 
           c.Car_Id, 
           c.CarMakeId, 
           c.CarModelId, 
           c.Reservation_Status, 
           c.Color 
          }).ToList(); 
    db.Dispose(); 
+0

仍然通過你的代碼和解決方案出錯 傳入字典的模型項目類型爲「System.Data.Entity.Infrastructure.DbQuery」,但是這個字典需要一個'System.Linq.IQueryable'類型的模型項目 –

+0

爲什麼你需要查詢查看? –