rol*_*ast 2 vb.net lambda predicatebuilder
我在一个单独的C#项目中重新创建了Predicatebuilder类,我试图在VB.NET项目中使用它但是我一直收到以下错误:
重载决策失败,因为没有可访问的"或"接受此数量的参数.
当我像这样使用它时:
Dim predicate = PredicateBuilder.False(Of t_Quote)()
predicate = predicate.Or(Function(q) q.iQuoteType = iQuoteType)
Run Code Online (Sandbox Code Playgroud)
引用了relivant项目,我正在使用正确的import语句,它都编译没有任何错误.
知道我哪里错了吗?
这是我正在使用的C#中的PredicateBuilder类:
public static class PredicateBuilder {public static Expression> True(){return f => true; public static Expression> False(){return f => false; }
Run Code Online (Sandbox Code Playgroud)public static Expression<Func<T, bool>> Or<T>(thisExpression> expr1,Expression> expr2){var invokedExpr = Expression.Invoke(expr2,expr1.Parameters.Cast()); 返回Expression.Lambda>(Expression.OrElse(expr1.Body,invokedExpr),expr1.Parameters); }
Run Code Online (Sandbox Code Playgroud)public static Expression<Func<T, bool>> And<T>(thisExpression> expr1,Expression> expr2){var invokedExpr = Expression.Invoke(expr2,expr1.Parameters.Cast()); 返回Expression.Lambda>(Expression.AndAlso(expr1.Body,invokedExpr),expr1.Parameters); }}
这是在VB.NET中适用于我的代码,因为我还调整了这个类在VB.NET中运行...
Imports System.Linq.Expressions
Public Module PredicateBuilder
Public Function [True](Of T)() As Expression(Of Func(Of T, Boolean))
Return Function(f) True
End Function
Public Function [False](Of T)() As Expression(Of Func(Of T, Boolean))
Return Function(f) False
End Function
<System.Runtime.CompilerServices.Extension()> _
Public Function [Or](Of T)(ByVal expr1 As Expression(Of Func(Of T, Boolean)), ByVal expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))
Dim invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())
Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.[Or](expr1.Body, invokedExpr), expr1.Parameters)
End Function
<System.Runtime.CompilerServices.Extension()> _
Public Function [And](Of T)(ByVal expr1 As Expression(Of Func(Of T, Boolean)), ByVal expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))
Dim invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())
Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.[And](expr1.Body, invokedExpr), expr1.Parameters)
End Function
End Module
Run Code Online (Sandbox Code Playgroud)
以下是我如何使用它:
Dim pred = PredicateBuilder.True(Of MyClass)()
pred = pred.And(Function(m As MyClass) m.SomeProperty = someValue)
pred = pred.Or(Function(m As MyClass) m.SomeProperty = someValue)
Run Code Online (Sandbox Code Playgroud)