2014-11-02 4 views
0

Я использую ASP.NET MVC 5 и EF 6 с LINQ У меня есть эта функция, которая возвращает результат JSON для JQuery Datatables.добавить столбец в результат запроса LINQ для jQuery datatables

public ActionResult Index(jQueryDataTableParamModel param = null) 
     { 
      if (Request.IsAjaxRequest() && param != null) 
      { 

       var allCategories = _db.Categories.ToList(); 
       IEnumerable<Category> categories; 
       var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]); 
       var sortDirection = Request["sSortDir_0"]; // asc or desc 
       Func<Category,string> orderingFunction = (c => sortColumnIndex==1? c.Name : 
        sortColumnIndex==2? c.SortOrder.ToString(): c.Status.ToString()); 

       if (!string.IsNullOrEmpty(param.sSearch)) 
       { 
        if(sortDirection == "desc"){ 
        categories = (from category in allCategories 
            where category.Name.ToLower().Contains(param.sSearch.ToLower()) 
            select category).OrderByDescending(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength); 
         } 
        else 
        { 
         categories = (from category in allCategories 
             where category.Name.ToLower().Contains(param.sSearch.ToLower()) 
             select category).OrderBy(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength); 
        } 
       } 
       else 
       { 
        if (sortDirection == "desc") { 
        categories = (from category in allCategories 
            select category).OrderByDescending(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength); 
        } 
        else{ 
         categories = (from category in allCategories 
             select category).OrderBy(orderingFunction).Skip(param.iDisplayStart).Take(param.iDisplayLength); 
        } 
       } 
       return Json(new 
       { 
        sEcho = param.sEcho, 
        iTotalRecords = categories.Count(), 
        iTotalDisplayRecords = categories.Count(), 
        aaData = (from category in categories 
           select new[] { category.CategoryID.ToString(), category.Name, category.SortOrder.ToString() }).ToArray() 
       }, 
           JsonRequestBehavior.AllowGet); 
      } 

      return View(); 
     } 

Что я хочу, чтобы добавить столбец в результате JSon, который содержит любое строковое значение, такие как кнопка HTML или тега привязки и т.д.

Прямо сейчас с выше код я получаю результат, как этот ..

{"sEcho":"3","iTotalRecords":3,"iTotalDisplayRecords":3,"aaData":[["1","Computers","1"],["2","Laptops","4"],["3","Mobiles","3"]]} 

, но я хочу результат с дополнительной колонкой в ​​aaData. пример:

{"sEcho":"3","iTotalRecords":3,"iTotalDisplayRecords":3,"aaData":[["1","Computers","1","<a href='somelink'>ActionLink</a>"],["2","Laptops","4","<a href='somelink'>ActionLink</a>"],["3","Mobiles","3","<a href='somelink'>ActionLink</a>"]]} 

Как я могу добиться такого результата.

ответ

1

Изменить этот

aaData = (from category in categories 
           select new[] { category.CategoryID.ToString(), category.Name, category.SortOrder.ToString() }).ToArray() 

Для этого

aaData = (from category in categories 
           select new[] { category.CategoryID.ToString(), category.Name, category.SortOrder.ToString(),"<a href='somelink'>ActionLink</a>" }).ToArray() 
+0

Thankyou, он работал .. –

Смежные вопросы