c# - Get subset of employees based on parameters -
i have done paging sorting in stored procedures. now, need same in linq following object. most readable linq query achieving sorting , paging in following scenario?
code
static list<employee> getmydata(int pageindex, int pagesize, out int itemcount, string sortfield, string sortdirection ) { employee e1= new employee(){empid = 1, empname = "e1"}; employee e2= new employee(){empid = 2, empname = "e2"}; employee e3= new employee(){empid = 3, empname = "e3"}; employee e4= new employee(){empid = 4, empname = "e4"}; employee e5= new employee(){empid = 5, empname = "e5"}; employee e6= new employee(){empid = 6, empname = "e6"}; list<employee> employees = new list<employee>(); employees.add(e1); employees.add(e2); employees.add(e3); employees.add(e4); employees.add(e5); employees.add(e6); itemcount = employees.count; //get subset of employees based on paging , sorting parameters //sorting can based on empid or empname list<employee> currentpageemployees = null; return currentpageemployees; } calling method
int count = 0; list<employee> e = getmydata(0, 2, out count, "empid", "descending");
you use custom selector in order resolve sortfield appropriate property of employee type. sort direction make assumption sortdirection either ascending or descending - if maybe bool better?
given here's example:
var selector = new func<employee, object>(e => e.gettype().getproperty(sortfield).getvalue(e, null)); var query = sortdirection.equals("descending", stringcomparison.ordinalignorecase) ? employees.orderbydescending(selector) : employees.orderby(selector); list<employee> currentpageemployees = query .skip(pageindex * pagesize) .take(pagesize) .tolist(); there dynamic linq extensions might make things more readble.
edit: removed casting
Comments
Post a Comment