网上看到的:
class Program { static Listlist = new List () { new User(){ID=1,Name="Hello",Age=17,Hobby="a"}, new User(){ID=2,Name="Boy",Age=50,Hobby="z"}, new User(){ID=3,Name="Girl",Age=33,Hobby="x"}, new User(){ID=4,Name="Fox",Age=43,Hobby="b"}, new User(){ID=5,Name="Fire",Age=17,Hobby="f"}, }; static void Main(string[] args) { var q = list.AsQueryable().OrderBy("Name", true); q.ToList().ForEach(x => Console.WriteLine(string.Format("ID:{0},Name:{1},Age:{2},Hobby:{3}", x.ID, x.Name, x.Age, x.Hobby))); Console.ReadLine(); } } public class User { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Hobby { get; set; } }//动态表达式 public static class Test { public static IQueryable OrderBy (this IQueryable source, string propertyName,bool asc = true) where TEntity : class { string command = asc ? "OrderBy" : "OrderByDescending"; var type = typeof(TEntity); var property = type.GetProperty(propertyName); var parameter = Expression.Parameter(type, "p"); var propertyAccess = Expression.MakeMemberAccess(parameter, property); var orderByExpression = Expression.Lambda(propertyAccess, parameter); var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExpression)); return source.Provider.CreateQuery (resultExpression); } }