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 38 39 40 41 42 43 44 45 46 47
| Public Class FonctionOf(Of MaClass As Class)
Public Shared Function AppliqueFiltreTri(ByVal lstOrig As IEnumerable(Of Object), ByVal MesDonnees As TableFullOption.PagerTabEnCours) As IEnumerable(Of Object)
Dim query As IEnumerable(Of Object) = From le As MaClass In lstOrig Select le 'Where _
' (If(Not HelperString.ContientInfo(MesDonnees.Filtre(0)) OrElse le.Name.Contains(MesDonnees.Filtre(0)), True, False)) AndAlso _
' (If(Not HelperString.ContientInfo(MesDonnees.Filtre(1)) OrElse le.Major.Contains(MesDonnees.Filtre(1)), True, False)) AndAlso _
' (If(Not HelperString.ContientInfo(MesDonnees.Filtre(2)) OrElse le.Sex.Contains(MesDonnees.Filtre(2)), True, False)) AndAlso _
' (If(Not HelperString.ContientInfo(MesDonnees.Filtre(3)) OrElse le.English.ToString.Contains(MesDonnees.Filtre(3)), True, False)) AndAlso _
' (If(Not HelperString.ContientInfo(MesDonnees.Filtre(4)) OrElse le.Japanese.ToString.Contains(MesDonnees.Filtre(4)), True, False)) AndAlso _
' (If(Not HelperString.ContientInfo(MesDonnees.Filtre(5)) OrElse le.Calculus.ToString.Contains(MesDonnees.Filtre(5)), True, False)) AndAlso _
' (If(Not HelperString.ContientInfo(MesDonnees.Filtre(6)) OrElse le.Geometry.ToString.Contains(MesDonnees.Filtre(6)), True, False))
Dim TypeClass As Type = GetType(MaClass)
For Each Sort In MesDonnees.MesOptions
Dim sortPropertyName As String = Sort.ColName
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 Expr As Expression = Expression.Property(paramExpr, pinfo)
If pinfo.PropertyType.IsValueType Then
Expr = Expression.Convert(Expr, GetType(Object))
End If
Dim orderByFunc As Func(Of MaClass, Object) = Expression.Lambda(Of Func(Of MaClass, Object))(Expr, paramExpr).Compile()
Dim sortFunc As Func(Of IEnumerable(Of MaClass), IOrderedEnumerable(Of MaClass)) = 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
End Class |