我这样做:
using System.Linq.Expressions;
namespace System.Linq
{
public static class LinqExtensions
{
public static IOrderedQueryable<TSource> OrderBy<TSource>(this IQueryable<TSource> source, string field, string dir = "asc")
{
// parametro => expressão
var parametro = Expression.Parameter(typeof(TSource), "r");
var expressao = Expression.Property(parametro, field);
var lambda = Expression.Lambda<Func<TSource, string>>(expressao, parametro); // r => r.AlgumaCoisa
if (string.Equals(dir, "desc", StringComparison.InvariantCultureIgnoreCase)){
return source.OrderByDescending(lambda);
}
return source.OrderBy(lambda);
}
public static IOrderedQueryable<TSource> ThenBy<TSource>(this IOrderedQueryable<TSource> source, string field, string dir = "asc")
{
var parametro = Expression.Parameter(typeof(TSource), "r");
var expressao = Expression.Property(parametro, field);
var lambda = Expression.Lambda<Func<TSource, string>>(expressao, parametro); // r => r.AlgumaCoisa
if (string.Equals(dir, "desc", StringComparison.InvariantCultureIgnoreCase))
{
return source.ThenByDescending(lambda);
}
return source.ThenBy(lambda);
}
}
}
用途:
example.OrderBy("Nome", "desc").ThenBy("other")
工作,如:
example.OrderByDescending(r => r.Nome).ThenBy(r => r.other)
可能重复[如何动态指定Linq OrderBy参数?](http://stackoverflow.com/questions/7265186/how-do-i-specify-the-linq-orderby-argument-dynamically) – Korayem 2016-01-28 14:43:32
这里是很好的答案。没有任何第三个库。 https://stackoverflow.com/a/233505/714828 – 2017-07-04 14:12:27