Nothing
Nothing

Reputation: 2642

Add query result to the list of Model in asp.net mvc

I created one model in my ASP.net MVC Project :

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

And I have one controller :

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
{

}

I want to add each data that I have query from database by linq (ien_item) to the object of ProductListingModel(prom object), and then return it as the json to my view.

Could anyone give me some ideas please.

Thanks so much.

Upvotes: 1

Views: 2881

Answers (1)

tvanfosson
tvanfosson

Reputation: 532515

First, your model shouldn't be inheriting from the data context. Passing your entire context to the view seriously violates the separation of concerns that is fundamental to MVC. Second, you should simply select into elements of the view type, then call ToList() on the result.

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

Then simply return the data using the Json() convenience method rather than constructing your own response.

 return Json( model, JsonRequestBehavior.AllowGet );

Upvotes: 1

Related Questions