public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName)
where T : EntityObject
{
var param = Expression.Parameter(typeof(T), "o");
var body = Expression.PropertyOrField(param,columnName);
var sortExpression = Expression.Lambda(body, param);
return query.OrderBy(sortExpression);
}
Поскольку тип для OrderBy не вытекает из sortExpression я должен указать это что-то вроде этого во время выполнения:Как применить OrderBy в IQueryable, используя имя столбца строки в универсальном методе расширения?
var sortExpression = Expression.Lambda<T, TSortColumn>(body, param);
Или
return query.OrderBy<T, TSortColumn>(sortExpression);
Я не думаю, что это возможно однако, поскольку TSortColumn может быть определен только во время выполнения.
Есть ли способ обойти это?
Не уверен, что если [это] (http://stackoverflow.com/a/12920204/1139347), что вы ищете, но посмотрите. Cheers – joaopintocruz 2012-10-16 17:33:35
@JTew Как я могу реализовать второй порядок по пункту..показать orderby id, а затем по дате – SRJ 2014-07-03 13:10:23