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()Comme j'ai du mal à comprendre le code (trouver à force de recherche Google), je ne comprend pas comment résoudre le problème.Une expression de type 'System.Int32' ne peut pas être utilisée pour un type de retour 'System.Object'
Merci de votre aide
Partager