如何在实体框架中迭代连接查询?

时间:2014-09-30 19:53:54

标签: sql entity-framework asp.net-mvc-3

所以这是我的控制器:

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();
        }

现在我需要迭代结果。我应该使用什么类型来将我的循环变量转换为获取欲望字段?

1 个答案:

答案 0 :(得分: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();