我一直在读一本C#中的书。我是一名VB.NET开发人员(也是一名非常初级的开发人员),我在使用以下代码时遇到了很多麻烦,这些代码包含了许多我以前从未见过的东西。我对Lambda表达式有基本的了解。
public List<T> SortByPropertyName(string propertyName, bool ascending)
{
var param = Expression.Parameter(typeof(T), "N");
var sortExpression = Expression.Lambda<Func<T, object>>
(Expression.Convert(Expression.Property(param, propertyName),
typeof(object)), param);
if (ascending)
{
return this.AsQueryable<T>().OrderBy<T, object>(sortExpression).ToList<T>();
}
else
{
return this.AsQueryable<T>().OrderByDescending<T, object>(sortExpression).ToList<T>
}
}
有没有人能够说明这段代码在做什么以及正在使用什么概念? 我也试图将这些代码转换成VB.NET,运气不佳,所以任何帮助都会受到赞赏。
答案 0 :(得分:3)
总的来说,代码是按指定的属性名称按升序或降序对某些内容(可能是列表?)进行排序。必须已在此类别的其他位置指定泛型类型T
。
代码通过调用ParameterExpression
创建一个新的Expression.Parameter
,然后将该参数传递给Expression.Lambda
函数,这将创建一个新的lambda表达式。
然后,此表达式用于通过调用OrderBy
或OrderByDescending
函数(取决于ascending
参数的选项)对列表进行排序,并将排序后的列表作为新的{{ 1}}。
我目前不在Visual Studio的前面,但这应该是一个非常接近VB的翻译。
List<T>
答案 1 :(得分:0)
这应该有效:
Return Me.AsQueryable.OrderBy(sortExpression).ToList
另请参阅:http://www.codeproject.com/KB/recipes/Generic_Sorting.aspx