Sunday 15 April 2012

c# - Apply OrderBy with DbSet -



c# - Apply OrderBy with DbSet -

i trying implement pagination , sorting generic repository. how take primary key column default order column in dbset ?

dbset = context.set<t>(); public iqueryable<t> getall(int pagenumber = 0, int pagesize = 10, string sortcolumn = "") { homecoming dbset.orderby("how utilize primary key column here").skip(pagenumber * pagesize)take(pagesize); }

i have used these extension methods accomplish similar:

public static string getkeyfield(type type) { var allproperties = type.getproperties(); var keyproperty = allproperties.singleordefault(p => p.isdefined(typeof(keyattribute))); homecoming keyproperty != null ? keyproperty.name : null; } public static iqueryable<t> orderby<t>(this iqueryable<t> source, string orderby) { homecoming source.getorderbyquery(orderby, "orderby"); } public static iqueryable<t> orderbydescending<t>(this iqueryable<t> source, string orderby) { homecoming source.getorderbyquery(orderby, "orderbydescending"); } private static iqueryable<t> getorderbyquery<t>(this iqueryable<t> source, string orderby, string methodname) { var sourcetype = typeof(t); var property = sourcetype.getproperty(orderby); var parameterexpression = expression.parameter(sourcetype, "x"); var getpropertyexpression = expression.makememberaccess(parameterexpression, property); var orderbyexpression = expression.lambda(getpropertyexpression, parameterexpression); var resultexpression = expression.call(typeof(queryable), methodname, new[] { sourcetype, property.propertytype }, source.expression, orderbyexpression); homecoming source.provider.createquery<t>(resultexpression); }

this allows pass property name string , build look passes regular linq orderby() function. in case, usage be:

dbset = context.set<t>(); public iqueryable<t> getall(int pagenumber = 0, int pagesize = 10, string sortcolumn = "") { homecoming dbset.orderby(getkeyfield(typeof(t))).skip(pagenumber * pagesize)take(pagesize); }

this assumes key field in entity class decorated key attribute.

c# repository-pattern dbset

No comments:

Post a Comment