public static class Linqextensions {private static PropertyInfo GetPropertyInfo (Type objType, string name) {var properties = objtype.getproperties (); var Matchedproperty = properties. FirstOrDefault (p = = P.name = = Name); if (Matchedproperty = = null) throw new ArgumentException ("name"); return matchedproperty; } private static LambdaExpression getorderexpression (Type objType, PropertyInfo pi) {var Paramex PR = Expression.parameter (objType); var propaccess = Expression.propertyorfield (paramexpr, pi. Name); var expr = Expression.lambda (propaccess, paramexpr); return expr; } public static ienumerable<t> orderby<t> (this ienumerable<t> query, string name) { var propinfo = GetPropertyInfo (typeof (T), name); var expr = getorderexpression (typeof (T), propinfo); var method = typeof (Enumerable). GetMethods (). FirstOrDefault (m = M.name = = "by" && m.getparameters (). Length = = 2); var Genericmethod = method. MakeGenericMethod (typeof (T), propinfo.propertytype); Return (ienumerable<t>) Genericmethod.invoke (null, new object[] {query, expr.compile ()}); } public static iqueryable<t> orderby<t> (this iqueryable<t> query, string name) { var propinfo = GetPropertyInfo (typeof (T), name); var expr = getorderexpression (typeof (T), propinfo); var method = typeof (Queryable). GetMethods (). FirstOrDefault (m = M.name = = "by" && m.getparameters (). Length = = 2); var Genericmethod = method. MakeGenericMethod (typeof (T), propinfo.propertytype); Return (iqueryable<t>) Genericmethod.invoke (null, new object[] {query, expr}); } public static ienumerable<t> orderbydescending<t> (this ienumerable<t> query, stringName) {var propinfo = GetPropertyInfo (typeof (T), name); var expr = getorderexpression (typeof (T), propinfo); var method = typeof (Enumerable). GetMethods (). FirstOrDefault (m = M.name = = "OrderByDescending" && m.getparameters (). Length = = 2); var Genericmethod = method. MakeGenericMethod (typeof (T), propinfo.propertytype); Return (ienumerable<t>) Genericmethod.invoke (null, new object[] {query, expr.compile ()}); } public static iqueryable<t> orderbydescending<t> (this iqueryable<t> query, string name) {var propinfo = GetPropertyInfo (typeof (T), name); var expr = getorderexpression (typeof (T), propinfo); var method = typeof (Queryable). GetMethods (). FirstOrDefault (m = M.name = = "OrderByDescending" && m.getparameters (). Length = = 2); var Genericmethod = method. MakeGenericMethod (typeof (T), propinfo.propertytype); RetuRN (iqueryable<t>) Genericmethod.invoke (null, new object[] {query, expr}); } }
Yourdbcontext db = new Yourdbcontext ();
This allows you to use the following method directly, DB. Tablename.orderby ("ColumnName"), which is required for dynamic sorting
EF Order (String propertyname), OrderByDescending (String propertyname) sorted by attribute, extension method