iQueryable LINQ lambda OrderByDescending()比OrderBy()慢

时间:2017-02-27 13:10:08

标签: c# performance linq lambda entity-framework-6

我正在IQueryable<T>对象上执行与排序和分页相关的任务。

我使用以下代码进行动态排序:

public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string propertyName, bool asc)
{
    var type = typeof(T);
    string methodName = asc ? "OrderBy" : "OrderByDescending";
    var property = type.GetProperty(propertyName);
    var parameter = Expression.Parameter(type, "p");
    var propertyAccess = Expression.MakeMemberAccess(parameter, property);
    var orderByExp = Expression.Lambda(propertyAccess, parameter);
    var orderByExp1 = Expression.Lambda(propertyAccess, parameter);

    MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName,
                      new Type[] { type, property.PropertyType },
                      source.Expression, Expression.Quote(orderByExp));
    return source.Provider.CreateQuery<T>(resultExp);
}

当我通过以下信息进行升序排序时,4 Sec

Num = 1000;
StartIndex = 1;
SortKey = "ID";
SortOrder = true; // OrderBy

我仅在1000中成功获得了按升序排列的4 Sec条记录。

但是当我希望记录按降序排列时41 Sec记录为1000

Num = 1000;
StartIndex = 1;
SortKey = "ID";
SortOrder = false; // OrderByDescending

升序=&gt; 4秒。

降序=&gt; 41秒。

所以我的问题是OrderByDescendingOrderBy慢?

0 个答案:

没有答案