目前,我有这样一种比较两个数字的方法:
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子句,基于属性和值。您可以构造Lessthan、LessOrEqualThan等等与System.Linq.Expressions.Expression预定义的操作符等价的表达式。
如何将此代码转换为处理字符串?System.Linq.Expressions.Expression没有像“contains”或“startwith”这样的预定义运算符,而且我对表达式树非常陌生。
谢谢,答案请用C# / VB发布。选择让您感觉更舒适的那个。