Bonjour,

J'essaie de faire une fonction générique, mais j'ai besoin de passer en paramètre une class (pas une instance, mais la class)
Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Dim orderByFunc As Func(Of WebForm2.Eleve, Object) = Expression.Lambda(Of Func(Of WebForm2.Eleve, Object))(memberExpr, paramExpr).Compile()

Ici, je voudrai remplacer WebForm2.Eleve par mon paramètre.

pour le moment, je passe le type de ma class : ByVal TypeClass As Type

Soit que j'arrive à passer en paramètre une class et je fait un GetType pour avoir le type
Soit à partir de mon type, j'obtiens ma class ...

Mais, je n'arrive à faire aucun des 2

voici le code complet
Code vb.net : 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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
Public Shared Function AppliqueFiltreTri(ByVal TypeClass As Type, ByVal lstOrig As IEnumerable(Of Object), ByVal MesDonnees As TableFullOption.PagerFrom.PagerTabEnCours) As IEnumerable(Of Object)
 
        Dim query As IEnumerable(Of Object) = From le As WebForm2.Eleve In lstOrig Select le
 
        For Each Sort In MesDonnees.Tri
 
            Dim sortPropertyName As String = TableFullOption.Head.lstColName(Sort.IndexColonne)
 
            If (TypeClass.GetProperties().Any(Function(prop) prop.Name = sortPropertyName AndAlso prop.CanRead)) Then
 
                Dim pinfo As PropertyInfo = TypeClass.GetProperty(sortPropertyName)
 
                Dim paramExpr As ParameterExpression = Expression.Parameter(TypeClass, "instance")
 
                Dim memberExpr As Expression = Expression.Property(paramExpr, pinfo)
                If pinfo.PropertyType.IsValueType Then
                    memberExpr = Expression.Convert(memberExpr, GetType(Object))
                End If
 
 
 
                Dim orderByFunc As Func(Of WebForm2.Eleve, Object) = Expression.Lambda(Of Func(Of WebForm2.Eleve, Object))(memberExpr, paramExpr).Compile()
                Dim sortFunc As Func(Of IEnumerable(Of WebForm2.Eleve), IOrderedEnumerable(Of WebForm2.Eleve)) = Nothing
                If (Not CBool(Sort.Sens)) Then
                    sortFunc = (Function(source) source.OrderBy(orderByFunc))
                Else
                    sortFunc = (Function(source) source.OrderByDescending(orderByFunc))
                End If
 
                query = sortFunc(query).ToList()
            End If
        Next
 
        Return query.AsEnumerable
 
    End Function