Условный заказ - PullRequest
       6

Условный заказ

1 голос
/ 17 июня 2010

Итак, сейчас у меня есть несколько столбцов, по которым пользователь может сортировать (Имя, Округ, Активный), и это легко, но неаккуратно.Выглядит примерно так ...

        Select Case e.SortExpression
            Case "Name"
                If (isDescending) Then
                    resultsList.OrderByDescending(Function(a) a.Name).ToList()
                Else
                    resultsList.OrderBy(Function(a) a.Name).ToList()
                End If
            Case "County" ... and so on

то, что я хотел бы сделать, это нечто более ... изящное, как это

Private Function SortThatList(ByVal listOfStuff As List(Of Stuff), ByVal isDescending As Boolean, ByVal expression As Func(Of Stuff)) As List(Of Stuff)
    If (isDescending) Then
        Return listOfStuff.OrderByDescending(expression)
    Else : Return listOfStuff.OrderBy(expression)
    End If
End Function

, но ему не нравится тип данных(Of TKey) ... Я устал от Func (ну, булево) (есть что-то в c #, что так хорошо работает), но не могу заставить этого делать то, что я хочу.Идеи?Какой магический синтаксис?

Ответы [ 2 ]

3 голосов
/ 17 июня 2010

Итак, метод расширения, который принимает дополнительный параметр в VB.Вероятно, вам не хватало (Of TSource, TKey) после имени метода, эквивалентного <TSource, TKey> в C #.

<Extension()>
Public Function OrderBy(Of TSource, TKey)(ByVal source As IEnumerable(Of TSource), ByVal isDescending As Boolean, ByVal selector As Func(Of TSource, TKey)) As IOrderedEnumerable(Of TSource)
    Return If(isDescending, source.OrderByDescending(selector), source.OrderBy(selector))
End Function
0 голосов
/ 17 июня 2010

принятый ответ в C #, если кто-нибудь приходит посмотреть

public IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, bool isDescending, Func<TSource, TKey> selector)
{
    return isDescending ? source.OrderByDescending(selector) : source.OrderBy(selector);
}

использование

VB

listOfStuff.OrderBy(isDescending, Function(x) x.Name)

C #

listOfStuff.OrderBy(isDescending, x => x.Name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...