以下多个OrderBy会起作用吗?
products.OrderBy<MyType>(sortPrm[0], sortPrm[1]).OrderBy<MyType>(sortPrm[3],sord);
我使用下面显示的自定义OrderBy泛型方法,它不返回IOrderedQueryable,因此我无法调用ThenBy方法。 sortPrm只是一个字符串数组,它保存我的排序列和排序方向信息,这些信息是从使用分隔符分割成数组的字符串输入创建的
public static IQueryable<T> OrderBy<T>(this IQueryable<T> query, string sortColumn, string direction)
{
string methodName = string.Format("OrderBy{0}",
direction.ToLower() == "asc" ? "" : "descending");
ParameterExpression parameter = Expression.Parameter(query.ElementType, "p");
MemberExpression memberAccess = null;
foreach (var property in sortColumn.Split('.'))
memberAccess = MemberExpression.Property
(memberAccess ?? (parameter as Expression), property);
LambdaExpression orderByLambda = Expression.Lambda(memberAccess, parameter);
MethodCallExpression result = Expression.Call(
typeof(Queryable),
methodName,
new[] { query.ElementType, memberAccess.Type },
query.Expression,
Expression.Quote(orderByLambda));
return query.Provider.CreateQuery<T>(result);
}
EDITED: 它似乎与生成的查询一起工作如下: 唯一奇怪的是,orderby列在生成的查询中是相反的;所以我只是颠倒了我把它们的顺序:
products.OrderBy<MyType>(sortPrm[3],sord ).OrderBy<MyType>(sortPrm[0],sortPrm[1]);
这是生成的查询:
{SELECT [t1].[value] // all the columns selected
...
...
FROM (
SELECT CONVERT(Int,[t0]. // all the columns selected
...
... AS [t0]
) AS [t1]
ORDER BY [t1].[/*my LAST orderby column*/], [t1].[[/*my FIRST orderby column*/] //Note the order is reversed
} System.Linq.IQueryable</*my iqueryable class*/> {System.Data.Linq.DataQuery</*my iqueryable class*/>}