В целом, код сортирует что-то (предположительно, список?) По указанному имени свойства в порядке возрастания или убывания. Там уже должен быть общий тип T
, указанный где-то еще в этом классе.
Код создает новый ParameterExpression
, вызывая Expression.Parameter
, затем передает этот параметр в функцию Expression.Lambda
, которая создает новое лямбда-выражение.
Это выражение затем используется для сортировки списка путем вызова функции OrderBy
или OrderByDescending
(выбор зависит от параметра ascending
) и возвращает отсортированный список как новый List<T>
.
В данный момент я не нахожусь перед Visual Studio, но это должен быть достаточно близкий перевод к VB для вас.
Public Function SortByPropertyName(ByVal propertyName as String, ByVal ascending as Boolean) as List(Of T)
Dim param = Expression.Parameter(GetType(T), "N")
Dim sortExpression = Expression.Lambda(Of Func(Of T, Object))(Expression.Convert(Expression.Property(param, propertyName), GetType(Object)), param)
If ascending Then
return Me.AsQueryable(Of T).OrderBy(Of T, Object)(sortExpression).ToList()
Else
return Me.AsQueryable(Of T).OrderByDescending(Of T, Object)(sortExpression).ToList()
End If
End Function