/// <summary>
/// 动态生成排序表达式
/// </summary>
/// <typeparam name="T">实体类型</typeparam>
/// <param name="t">实体值</param>
/// <param name="linq">实体集合</param>
/// <param name="property">要排序的实体字段</param>
/// <param name="desc">倒序desc,正序asc</param>
/// <returns></returns>
public static IOrderedQueryable<T> BuildOrderExpression<T>(IQueryable<T> linq, string property, string desc)
{
if (linq == null || linq.Count() == 0) return null;
if (string.IsNullOrWhiteSpace(property) || string.IsNullOrWhiteSpace(desc)) return null;
var param = Expression.Parameter(typeof(T), property);
var prop = Expression.PropertyOrField(param, property);
var sortLambda = Expression.Lambda(prop, param);
Expression<Func<IOrderedQueryable<T>>> sortMethod = null;
if (desc.ToUpper() == "DESC")
sortMethod = (() => linq.OrderByDescending<T, object>(k => null));
else
sortMethod = (() => linq.OrderBy<T, object>(k => null));
var methodCallExpression = (sortMethod.Body as MethodCallExpression);
if (methodCallExpression == null)
throw new Exception("构建表达式出错");
var method = methodCallExpression.Method.GetGenericMethodDefinition();
var genericSortMethod = method.MakeGenericMethod(typeof(T), prop.Type);
IOrderedQueryable<T> linq2 = (IOrderedQueryable<T>)genericSortMethod.Invoke(linq, new object[] { linq, sortLambda });
return linq2;
}