Как создать дерево выражений, чтобы делать то же самое, что и «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

Он отлично работает и расходуется таким образом

query = ETForGreaterThan(query, Value, propertyInfo)

Как вы можете видите, я даю ему коллекцию IQueryable, и он добавляет к ней предложение where, основанное на свойстве и значении. Y может создавать эквиваленты Lessthan, LessOrEqualThan и т.д., поскольку в System.Linq.Expressions.Expression эти операторы предопределены.

¿Как я могу преобразовать этот код, чтобы сделать то же самое со строками? System.Linq.Expressions.Expression не дает мне предопределенных операторов, таких как "содержит" или "начало с", и я действительно новичок в деревьях выражений.

Спасибо, и, пожалуйста, опубликуйте свой ответ на C # / VB. Выберите тот, в котором вам будет комфортнее.

8
задан AakashM 29 December 2010 в 14:29
поделиться