Expression Lambda et integer
Bonjour
Mon but est de faire un tri sur une propriété de ma classe Eleve choisi de manière dynamique , ici défini en dur par sortPropertyName.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
Dim personType As Type = GetType(Eleve)
Dim sortPropertyName As String = "Toto"
If (personType.GetProperties().Any(Function(prop) prop.Name = sortPropertyName AndAlso prop.CanRead)) Then
Dim pinfo As PropertyInfo = personType.GetProperty(sortPropertyName)
Dim paramExpr As ParameterExpression = Expression.Parameter(GetType(Eleve), "instance")
Dim memberExpr As MemberExpression = Expression.Property(paramExpr, pinfo)
Dim orderByFunc As Func(Of Eleve, Object) = Expression.Lambda(Of Func(Of Eleve, Object))(memberExpr, paramExpr).Compile()
Dim sortFunc As Func(Of IEnumerable(Of Eleve), IOrderedEnumerable(Of Eleve)) = Nothing
If (Sens) Then
sortFunc = (Function(source) source.OrderBy(orderByFunc))
Else
sortFunc = (Function(source) source.OrderByDescending(orderByFunc))
End If
query = sortFunc(query).ToList()
End If |
Ce code fonctionne nickel pour les strings mais pour les integer j'ai une erreur sur
Code:
Dim orderByFunc As Func(Of Eleve, Object) = Expression.Lambda(Of Func(Of Eleve, Object))(memberExpr, paramExpr).Compile()
Citation:
Une expression de type 'System.Int32' ne peut pas être utilisée pour un type de retour 'System.Object'
Comme j'ai du mal à comprendre le code (trouver à force de recherche Google), je ne comprend pas comment résoudre le problème.
Merci de votre aide