gpt4 book ai didi

vb.net - 在 VB.NET 中使用 PredicateBuilder

转载 作者:行者123 更新时间:2023-12-02 05:46:25 24 4
gpt4 key购买 nike

我在一个单独的 C# 项目中重新创建了 Predicatebuilder 类,并且我试图在 VB.NET 项目中使用它,但我不断收到以下错误:

Overload resolution failed because no accessible 'Or' accepts this number of arguments.

当我这样使用它时:

Dim predicate = PredicateBuilder.False(Of t_Quote)()
predicate = predicate.Or(Function(q) q.iQuoteType = iQuoteType)

引用了相关项目,我使用了正确的 imports 语句,所有编译都没有任何错误。

知道我哪里出错了吗?

这是我正在使用的 C# 中的 PredicateBuilder 类:

public static class PredicateBuilder { public static Expression> True() { return f => true; } public static Expression> False() { return f => false; }

    public static Expression<Func<T, bool>> Or<T>(this

Expression> expr1, Expression> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast()); return Expression.Lambda> (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters); }

    public static Expression<Func<T, bool>> And<T>(this

Expression> expr1, Expression> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast()); return 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

下面是我如何使用它:

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)

关于vb.net - 在 VB.NET 中使用 PredicateBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1506771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com