这段代码的作用是什么? (C#)

时间:2009-08-26 14:50:32

标签: vb.net lambda c#-to-vb.net

我一直在读一本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,运气不佳,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:3)

总的来说,代码是按指定的属性名称按升序或降序对某些内容(可能是列表?)进行排序。必须已在此类别的其他位置指定泛型类型T

代码通过调用ParameterExpression创建一个新的Expression.Parameter,然后将该参数传递给Expression.Lambda函数,这将创建一个新的lambda表达式。

然后,此表达式用于通过调用OrderByOrderByDescending函数(取决于ascending参数的选项)对列表进行排序,并将排序后的列表作为新的{{ 1}}。

我目前不在Visual Studio的前面,但这应该是一个非常接近VB的翻译。

List<T>

答案 1 :(得分:0)

这应该有效:

Return Me.AsQueryable.OrderBy(sortExpression).ToList

另请参阅:http://www.codeproject.com/KB/recipes/Generic_Sorting.aspx