2012-04-19 99 views
1

我創造了我的ASP.net MVC項目一個模式:查詢結果添加到模型的列表在asp.net mvc的

public class ProductListingModels:ItemEntityDataContext 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int DepartmentID { get; set; } 
    public int BrandID { get; set; } 
} 

而且我有一個控制器:

public class ProductListingController : Controller 
{ 
    // GET: /ProductListing/ 
    public JsonResult Index(string depID) 
    { 
    Context DataContext = new Context(); 
    JsonResult jr = new JsonResult(); 
    int dep = Convert.ToInt32(depID); 
    var ien_item = from i in DataContext.DataContext.Items 
     join c in DataContext.DataContext.Categories on i.CategoryID equals c.ID 
     join d in DataContext.DataContext.Departments on i.DepartmentID equals d.ID 
     join brand in DataContext.DataContext.Brands on i.BrandID equals brand.ID 
     orderby i.LastUpdated descending 
     where i.DepartmentID == dep && i.Active > 0 && i.WebsiteShow > 0 && c.Active > 0 

        select i; 

    List<ProductListingModels> prom = new List<ProductListingModels>(); 
    // 
    //Adding ien_item to the prom 
    // 
    jr.Data = prom; 
     jr.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 
     return jr; 
    } 
} 
public class Context : ICEWeb.Models.ItemEntityDataContext 
{ 

} 

我想將linq(ien_item)從數據庫查詢的每個數據添加到ProductListingModel(prom對象)的對象 ,然後將其作爲json返回到我的視圖。

請問誰能給我一些想法。

非常感謝。

回答

1

首先,您的模型不應該從數據上下文繼承。將整個上下文傳遞給視圖嚴重違反了MVC基本問題的分離。其次,您應該簡單地選擇視圖類型的元素,然後對結果調用ToList()。

var model = (from i in DataContext.DataContext.Items 
      join c in DataContext.DataContext.Categories on i.CategoryID equals c.ID 
      join d in DataContext.DataContext.Departments on i.DepartmentID equals d.ID 
      join brand in DataContext.DataContext.Brands on i.BrandID equals brand.ID 
      orderby i.LastUpdated descending 
      where i.DepartmentID == dep && i.Active > 0 && i.WebsiteShow > 0 && c.Active > 0 
      select new ProductListingModels 
      { 
       ID = i.ID, 
       Name = i.Name, 
       ... 
      }).ToList(); 

然後,只需使用Json()便捷方法返回數據,而不是構造自己的響應。

return Json(model, JsonRequestBehavior.AllowGet); 
+0

感謝tvanfosson,但如果我有超過十個字段我想選擇,我必須使用SELECT NEW {......}嗎? – Nothing 2012-04-19 01:33:08

+0

你也可以使用類似AutoMapper的東西(http://automapper.org/)來映射實體和視圖模型。在這種情況下,您只需選擇該項並調用'ToList()'將它們存入內存,然後(假設您已設置了映射)執行'.Select(m => Mapper.Map ());' – tvanfosson 2012-04-19 01:51:39

+0

如果對象描述了一個產品,那麼模型的類名應該是Product,而不是ProductListingModels。您應該找到並遵循一些非常好的MVC示例來了解如何完成這些事情以及如何佈置它們。你的代碼示例顯示了幾個領域缺乏理解。 – 2012-04-19 02:33:07