Click here to Skip to main content
15,891,753 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi, I am using mvc4 nuget package dynamic linq query for orderby. I was stuck at this. Can anyone help out Please


using System.Linq.Dynamic;
public ActionResult Index(int? page, string sortOrder,string sortvarOrder)
{
ViewBag.NameSortParm = String.IsNullOrEmpty(sortvarOrder) ? "sortOrder_desc":"sortOrder_asc";

int pageSize = 5;
int pageNumber = (page ?? 1);
var printerMaster = db.PrinterMasters.Include(x => x.WarehouseMaster);

if (sortOrder != null)
{
if (ViewBag.NameSortParm == sortOrder_asc)
{
var result = db.PrinterMasters.OrderBy(sortOrder).ToList();
return View(result.ToPagedList(pageNumber, pageSize));
}
else
{
var result1 = db.PrinterMasters.OrderByDescending(sortOrder)ToList();
return View(result1.ToPagedList(pageNumber, pageSize));
}

}
else
{
sortOrder = "PrinterId";
var result = db.PrinterMasters.OrderBy(sortOrder).ToList();
return View(result.ToPagedList(pageNumber, pageSize));
}
}

will this work?? I am new to mvc. Please help me
Posted

XML
create an extension method as below

 public static class SortingExtension
    {
      public static IQueryable<T> OrderByField<T>(this IQueryable<T> q, string SortField, bool Ascending)
      {
          var param = Expression.Parameter(typeof(T), "p");
          var prop = Expression.Property(param, SortField);
          var exp = Expression.Lambda(prop, param);
          string method = Ascending ? "OrderBy" : "OrderByDescending";
          Type[] types = new Type[] { q.ElementType, exp.Body.Type };
          var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);
          return q.Provider.CreateQuery<T>(mce);
      }
    }


//Do the following changes in the Action To the QueryField pass the column_Name to sortBy and the true/false value if true it will sort by Ascending for false Descending

var printerMaster = db.PrinterMasters.Include(x => x.WarehouseMaster);

printerMaster.OrderByField(fieldName,true)
 
Share this answer
 
public ActionResult Index(int? page, string sortOrder,string sortvarOrder)
{
ViewBag.NameSortParm = sortvarOrder == sortOrder ? "sortOrder_desc" : sortOrder;
var pi = ViewBag.NameSortParm;

int pageSize = 5;
ViewBag.pagesize=pageSize;
int pageNumber = (page ?? 1);
var printerMaster = db.PrinterMasters.Include(x => x.WarehouseMaster);

if (sortOrder != null)
{
if (pi != "sortOrder_desc")
{
var result = db.PrinterMasters.OrderBy(sortOrder).ToList();
ViewBag.cnt = result.Count();
return View(result.ToPagedList(pageNumber, pageSize));
}
else
{
var result1 = db.PrinterMasters.OrderBy("it." + sortOrder + " desc").ToList();
ViewBag.cnt = result1.Count();
return View(result1.ToPagedList(pageNumber, pageSize));
}
}
else
{
sortOrder = "WarehouseID";
var result = db.PrinterMasters.OrderBy(sortOrder).ToList();
ViewBag.cnt=result.Count();
return View(result.ToPagedList(pageNumber, pageSize));
}
}


and my view::

@Html.ActionLink("WarehouseName", "Index", new { sortvarOrder = ViewBag.NameSortParm, sortOrder = "PrinterID" })

@Html.ActionLink("PrinterName", "Index", new { sortOrder = "PrinterName", sortvarOrder = ViewBag.NameSortParm })
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900