Actualmente, tengo este método para comparar dos números¿Cómo crear un árbol de expresión que hacer lo mismo que "StartsWith"
Private Function ETForGreaterThan(ByVal query As IQueryable(Of T), ByVal propertyValue As Object, ByVal propertyInfo As PropertyInfo) As IQueryable(Of T)
Dim e As ParameterExpression = Expression.Parameter(GetType(T), "e")
Dim m As MemberExpression = Expression.MakeMemberAccess(e, propertyInfo)
Dim c As ConstantExpression = Expression.Constant(propertyValue, propertyValue.GetType())
Dim b As BinaryExpression = Expression.GreaterThan(m, c)
Dim lambda As Expression(Of Func(Of T, Boolean)) = Expression.Lambda(Of Func(Of T, Boolean))(b, e)
Return query.Where(lambda)
End Function
Trabaja muy bien y se consume de esta manera
query = ETForGreaterThan(query, Value, propertyInfo)
Como puede ver, le doy una colección IQueryable y le agrega una cláusula where, basada en una propiedad y un valor. Y puede construir equivalentes Lessthan, LessOrEqualThan, etc., como System.Linq.Expressions.Expression tiene estos operadores predefinidos.
¿Cómo puedo transformar este código para hacer lo mismo con las cadenas? System.Linq.Expressions.Expression no me da un operador predefinido como "contains" o "startwith" y realmente soy novato con los árboles de Expression.
Gracias, y por favor Publique su respuesta en C#/VB. Elige el que te haga sentir más cómodo.
Probado y trabajando de nuevo. Dos veces menos de 24 h. Tom, ¿hay alguna posibilidad de comprar una cerveza para ti? : D Gracias, de hecho. – Jonathan
Tom - usted señor es un héroe – whiteshooz