Используйте тип свойства в выражении - PullRequest
0 голосов
/ 16 февраля 2010

У меня есть функция, которая создает различные типы выражений в зависимости от значения переменной, переданной в.

Protected Function BuildSortPredicate(ByVal tableType As Object, ByRef expr As Expression)
    Dim sortExpression As Expression
    If tableType Is "Job" Then
        sortExpression = Expression.Lambda(Of Func(Of Job, String))(expr)
    ElseIf tableType Is "User" Then
        sortExpression = Expression.Lambda(Of Func(Of User, Integer))(expr)
    ...
    End If
    Return sortExpression
End Function

Как мне избежать длинной структуры if / else (или case case)? В идеале я ищу что-то вроде этого:

Protected Function BuildSortPredicate(ByVal tableType As Object, ByRef exprt As Expression)
    Dim sortExpression As Expression
    sortExpression = Expression.Lambda(Of Func(Of tableType, String))(expr)
    Return sortExpression
End Function

Общая цель здесь - преобразовать выражение в соответствующий тип, чтобы я мог использовать его в своем запросе LINQ.

1 Ответ

1 голос
/ 16 февраля 2010

Вы хотите сделать универсальную функцию

Protected Function BuildSortPredicate(Of T)(ByVal expr As Expression) As Expression
    Dim sortExpression As Expression
    sortExpression = Expression.Lambda(Of Func(Of T, String))(expr)
    Return sortExpression
End Function
...