我使用動態過濾器,它使用對象屬性,操作符和值過濾集合。現在,如果屬性是一個字符串,操作符是「包含」,值是「單詞」,則應該對包含「世界」的過濾對象進行相應的過濾。Lambda Expression「Contains」
在Linq我有表達式。 Equal
,NotEqual
,GreaterThanOrEqual
,LessThanOrEqual
,但沒有 「Contains
」。如何更換它?
考慮下面的代碼(在VB.NET,但無所謂)
Select Case compOp
Case ComparisonOperator.Contains
' ?????? WHAT HERE ???? '
filterExpression = Expression.Lambda(Of Func(Of PropertyType, Boolean))(Expression.Equal(myObjPropertyParam, myConstExpression), myObjParam)
Case ComparisonOperator.Different
filterExpression = Expression.Lambda(Of Func(Of PropertyType, Boolean))(Expression.NotEqual(myObjPropertyParam, myConstExpression), myObjParam)
Case ComparisonOperator.Equal
filterExpression = Expression.Lambda(Of Func(Of PropertyType, Boolean))(Expression.Equal(myObjPropertyParam, myConstExpression), myObjParam)
Case ComparisonOperator.GreatherThanOrEqual
filterExpression = Expression.Lambda(Of Func(Of PropertyType, Boolean))(Expression.GreaterThanOrEqual(myObjPropertyParam, myConstExpression), myObjParam)
Case ComparisonOperator.LessThanOrEqual
filterExpression = Expression.Lambda(Of Func(Of PropertyType, Boolean))(Expression.LessThanOrEqual(myObjPropertyParam, myConstExpression), myObjParam)
End Select
編輯:
使用的解決方案,gratie托馬斯萊韋斯克和喬恩斯基特)
Dim expr As Expression = Nothing
Select Case compOp
Case ComparisonOperator.Contains
expr = Expression.Call(myObjPropertyParam, "Contains", Nothing, constantExpression)
Case ComparisonOperator.Different
expr = Expression.NotEqual(myObjPropertyParam, constantExpression)
Case ComparisonOperator.Equal
expr = Expression.Equal(myObjPropertyParam, constantExpression)
Case ComparisonOperator.GreatherThanOrEqual
expr = Expression.GreaterThanOrEqual(myObjPropertyParam, constantExpression)
Case ComparisonOperator.LessThanOrEqual
expr = Expression.LessThanOrEqual(myObjPropertyParam, constantExpression)
End Select
filterExpression = Expression.Lambda(Of Func(Of PropertyType, Boolean))(expr, myObjParam)
'Contains'是什麼意思?告訴我們你將如何在VB中編寫它。 – Gabe
@Gabe:「Contains」應該表示類似於SQL中的LIKE或像.NET中的字符串Contains()。例如「Microsoft Word」.Contains(「Microsoft」) – serhio
「Contains」不是比較運算符。它是一個函數調用。 –