【发布时间】:2010-12-29 11:51:29
【问题描述】:
目前,我有这种方法来比较两个数字
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 没有给我一个预定义的运算符,比如“包含”或“startwith”,我真的不喜欢表达式树。
谢谢,请在 C#/VB 中发布您的答案。选择让您感觉更舒适的那个。
【问题讨论】:
标签: c# .net vb.net lambda expression-trees