【发布时间】:2011-07-08 18:59:12
【问题描述】:
我正在尝试基于字符串列名和 linq 为 List 编写通用排序扩展方法。
我这里有大部分,但现在还不行。逻辑取自this site。
public static List<T> Sort<T>(this List<T> list, string sortColumn, string sortOrder)
{
if (string.IsNullOrWhiteSpace(sortColumn))
return list;
int order = sortOrder == "desc" ? -1 : 1;
var param = Expression.Parameter(typeof(T), "x");
var sortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
list = list.AsQueryable().OrderBy(sortExpression).ToList();
return list;
}
单步执行此代码,我看到该列表已正确排序,但是当返回时,它对我传入的列表没有影响。我猜 AsQueryable 或 OrderBy 正在内存中创建一个新对象,我不再指向相同的参考。有没有人有一些关于如何使这项工作适当地工作的提示,或者除此之外,另一种解决方案?谢谢!
【问题讨论】:
-
你应该只是
return list.AsQueryable().OrderBy(sortExpression).ToList(); -
您意识到您的表达式不适用于内在类型? (
int、DateTime、bool等)
标签: c# linq generics sorting .net-4.0