2014-09-30 71 views
1

所以這是我的控制器:如何在實體框架中迭代聯接查詢?

public ActionResult Index() 
     { 
      DBContext_Model db = new DBContext_Model(); 
      var srmas = (
          from SRMAs in db.SRMAs 
          join SRMAStatus in db.SRMAStatus on SRMAs.Id equals SRMAStatus.Id 
          join PurchaseOrders in db.PurchaseOrders on SRMAs.PONumber equals PurchaseOrders.PONumber 
          join Suppliers in db.Suppliers on PurchaseOrders.SupplierID equals Suppliers.SupplierID 
          select new {SRMAs.Id,SRMAs.PONumber,SRMAs.CreatedOn,Suppliers.SupplierName,SRMAStatus.StatusName,PurchaseOrders.PODate,PurchaseOrders.suppliersOrderNumber} 
         ).ToList(); 
      ViewBag.SRMAs = srmas; 
      return View(); 
     } 

現在我需要遍歷結果。我應該使用什麼類型來投射我的循環變量來獲取慾望領域?

回答

2

您將擁有此查詢中的匿名類型列表。您不能轉換爲匿名類型,因爲它只存在於運行時。

克服此問題的最佳方法是創建一個ViewModel類。持久化類一無所知,它的唯一目的是數據傳輸:

public class IndexViewModel 
{ 
    public int SRMAsId { get; set; } 
    public int PONumber { get; set; } 
    // ... 
} 

有了這個,你可以選擇此類的新實例:

ViewBag.SRMAs = srmas.Select(srma => new IndexViewModel 
            { 
             SRMAsId = srma.Id, 
             PONumber = srma.PONumber, 
             // ... 
            }).ToList();