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 vb : Sélectionner tout - Visualiser dans une fenêtre à part
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 VB : Sélectionner tout - Visualiser dans une fenêtre à part
Dim orderByFunc As Func(Of Eleve, Object) = Expression.Lambda(Of Func(Of Eleve, Object))(memberExpr, paramExpr).Compile()
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