В настоящее время у меня есть этот метод для сравнения двух чисел
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 не дает мне предопределенный оператор, такой как «contains» или «startwith», и я действительно нуб с деревьями выражений.
Спасибо, и, пожалуйста, оставьте свой ответ на C # / VB. Выберите тот, который заставляет вас чувствовать себя более комфортно.