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
Partager