В настоящее время у меня есть этот метод для сравнения двух чисел
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. Выберите тот, в котором вы чувствуете себя более комфортно.