vb.net 从反射表达式中排除字符串
vb.net exclude string from reflection Expression
我用relection做一个动态滤镜。但是当我有 DateTime 字段时,我想从我的搜索中排除 date=Nothing.
Dim Expr As Expression = Expression.Property(paramExpr, pinfo)
Dim Typ = pinfo.PropertyType.FullName
Dim CondPart As Expression = Nothing
Dim toStr As Expression = Nothing
If Typ.Contains("DateTime") Then
toStr = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd")) 'Here string to exclude "00010101" -> 01/01/0001
Else
toStr = Expression.Call(If(pinfo.PropertyType.IsValueType, Expr, Expression.Coalesce(Expr, Expression.Constant(String.Empty))), "ToString", Nothing)
End If
Dim indexOf As Expression = Expression.Call(toStr, "IndexOf", Nothing, Expression.Constant(MesDonnees.FiltreGeneral), Expression.Constant(StringComparison.OrdinalIgnoreCase))
CondPart = Expression.NotEqual(indexOf, Expression.Constant(-1))
If conditionGbl Is Nothing Then
conditionGbl = CondPart
Else
conditionGbl = Expression.OrElse(conditionGbl, CondPart)
End If
我试着把
toStr = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd"))
toStr = Expression.NotEqual(toStr, Expression.Constant("00010101"))
但是我有错误
No method 'IndexOf' exists on the type 'System.Boolean'
我认为它介于 NotEqual 和 indexOf 之间。
我也试试
Dim NoNullDte As Expression = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd"))
toStr = Expression.Call(NoNullDte, "IndexOf", Nothing, Expression.Constant("00010101"), Expression.Constant(StringComparison.OrdinalIgnoreCase))
但是,我有错误:
No method 'IndexOf' exists on the type 'System.Int32'
有人知道如何正确排除空日期吗?
强制尝试...
Dim CondSpe As Expression = Nothing
Dim toStr As Expression = Nothing
If Typ.Contains("DateTime") Then
toStr = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd"))
Dim indexOfnullDte As Expression = Expression.Call(toStr, "IndexOf", Nothing, Expression.Constant("00010101"))
CondSpe = Expression.Equal(indexOfnullDte, Expression.Constant(-1))
Else
toStr = Expression.Call(If(pinfo.PropertyType.IsValueType, Expr, Expression.Coalesce(Expr, Expression.Constant(String.Empty))), "ToString", Nothing)
End If
Dim indexOf As Expression = Expression.Call(toStr, "IndexOf", Nothing, Expression.Constant(MesDonnees.FiltreGeneral), Expression.Constant(StringComparison.OrdinalIgnoreCase))
Dim CondPart As Expression = Expression.NotEqual(indexOf, Expression.Constant(-1))
If CondSpe IsNot Nothing Then CondPart = Expression.AndAlso(CondPart, CondSpe)
If conditionGbl Is Nothing Then
conditionGbl = CondPart
Else
conditionGbl = Expression.OrElse(conditionGbl, CondPart)
End If
如果是日期时间字段,我将表达式 (CondSpe) 添加到筛选字段,并在 CondPart
上添加 expression.andalso
我用relection做一个动态滤镜。但是当我有 DateTime 字段时,我想从我的搜索中排除 date=Nothing.
Dim Expr As Expression = Expression.Property(paramExpr, pinfo)
Dim Typ = pinfo.PropertyType.FullName
Dim CondPart As Expression = Nothing
Dim toStr As Expression = Nothing
If Typ.Contains("DateTime") Then
toStr = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd")) 'Here string to exclude "00010101" -> 01/01/0001
Else
toStr = Expression.Call(If(pinfo.PropertyType.IsValueType, Expr, Expression.Coalesce(Expr, Expression.Constant(String.Empty))), "ToString", Nothing)
End If
Dim indexOf As Expression = Expression.Call(toStr, "IndexOf", Nothing, Expression.Constant(MesDonnees.FiltreGeneral), Expression.Constant(StringComparison.OrdinalIgnoreCase))
CondPart = Expression.NotEqual(indexOf, Expression.Constant(-1))
If conditionGbl Is Nothing Then
conditionGbl = CondPart
Else
conditionGbl = Expression.OrElse(conditionGbl, CondPart)
End If
我试着把
toStr = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd"))
toStr = Expression.NotEqual(toStr, Expression.Constant("00010101"))
但是我有错误
No method 'IndexOf' exists on the type 'System.Boolean'
我认为它介于 NotEqual 和 indexOf 之间。
我也试试
Dim NoNullDte As Expression = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd"))
toStr = Expression.Call(NoNullDte, "IndexOf", Nothing, Expression.Constant("00010101"), Expression.Constant(StringComparison.OrdinalIgnoreCase))
但是,我有错误:
No method 'IndexOf' exists on the type 'System.Int32'
有人知道如何正确排除空日期吗?
强制尝试...
Dim CondSpe As Expression = Nothing
Dim toStr As Expression = Nothing
If Typ.Contains("DateTime") Then
toStr = Expression.Call(Expr, "ToString", Nothing, Expression.Constant("yyyyMMdd"))
Dim indexOfnullDte As Expression = Expression.Call(toStr, "IndexOf", Nothing, Expression.Constant("00010101"))
CondSpe = Expression.Equal(indexOfnullDte, Expression.Constant(-1))
Else
toStr = Expression.Call(If(pinfo.PropertyType.IsValueType, Expr, Expression.Coalesce(Expr, Expression.Constant(String.Empty))), "ToString", Nothing)
End If
Dim indexOf As Expression = Expression.Call(toStr, "IndexOf", Nothing, Expression.Constant(MesDonnees.FiltreGeneral), Expression.Constant(StringComparison.OrdinalIgnoreCase))
Dim CondPart As Expression = Expression.NotEqual(indexOf, Expression.Constant(-1))
If CondSpe IsNot Nothing Then CondPart = Expression.AndAlso(CondPart, CondSpe)
If conditionGbl Is Nothing Then
conditionGbl = CondPart
Else
conditionGbl = Expression.OrElse(conditionGbl, CondPart)
End If
如果是日期时间字段,我将表达式 (CondSpe) 添加到筛选字段,并在 CondPart
上添加 expression.andalso