В настоящее время у меня есть этот метод для сравнения двух чисел
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
Он отлично работает и расходуется таким образом
query = ETForGreaterThan(query, Value, propertyInfo)
Как вы можете видите, я даю ему коллекцию IQueryable, и он добавляет к ней предложение where, основанное на свойстве и значении. Y может создавать эквиваленты Lessthan, LessOrEqualThan и т.д., поскольку в System.Linq.Expressions.Expression эти операторы предопределены.
¿Как я могу преобразовать этот код, чтобы сделать то же самое со строками? System.Linq.Expressions.Expression не дает мне предопределенных операторов, таких как "содержит" или "начало с", и я действительно новичок в деревьях выражений.
Спасибо, и, пожалуйста, опубликуйте свой ответ на C # / VB. Выберите тот, в котором вам будет комфортнее.