Mit PredicateBuilder mit VB.NET
Habe ich neu die Predicatebuilder-Klasse in einer separaten C# - Projekt, und ich bin versucht, es zu benutzen in einem VB.NET Projekt, aber ich bekomme immer folgenden Fehler:
Überlast-Auflösung ist fehlgeschlagen, da keine zugängliche 'Oder' akzeptiert diese Anzahl von Argumenten.
wenn ich es so auf:
Dim predicate = PredicateBuilder.False(Of t_Quote)()
predicate = predicate.Or(Function(q) q.iQuoteType = iQuoteType)
Den relivant Projekt verwiesen wird, bin ich mit den richtigen imports-Anweisung und alles ohne Fehler kompiliert.
Irgendeine Idee, wohin ich gehe falsch gemacht?
Hier ist die PredicateBuilder Klasse in C# ich bin mit:
public static class PredicateBuilder
{
public static Ausdruck> Wahr() {
return f => true; }
public static Ausdruck> Falsch() {
return f => false; }public static Expression<Func<T, bool>> Or<T>(this
Ausdruck> expr1,
Ausdruck> ausdr2)
{
var invokedExpr = Ausdruck.Invoke(expr2,
expr1.Parameter.Cast());
Rückkehr Ausdruck.Lambda>
(Ausdruck aus.OrElse(expr1.Körper,
invokedExpr), expr1.Parameter);
}public static Expression<Func<T, bool>> And<T>(this
Ausdruck> expr1,
Ausdruck> ausdr2)
{
var invokedExpr = Ausdruck.Invoke(expr2,
expr1.Parameter.Cast());
Rückkehr Ausdruck.Lambda>
(Ausdruck aus.AndAlso(expr1.Körper,
invokedExpr), expr1.Parameter);
}
}
- Ohne zu wissen, Ihre eigene API, es ist unmöglich, eine Antwort auf diese Frage. Post die C# - version des Codes, oder post, die Unterschrift zu der PredicateBuilder.Oder Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist der code, der funktioniert bei mir in VB.NET wie ich auch gezwickt dieser Klasse zu laufen VB.NET...
Und hier ist, wie ich es verwenden:
Löste das Problem. Es war, weil die Option Infer auf Off gesetzt ist. Sobald ich setzen Sie es Auf die richtige Art war geschlossen und alles funktioniert wie es sollte.
Einer Sache zu Bedenken, wenn es auch nicht die Lösung Ihrer speziellen Frage, ist der groß-und Kleinschreibung bei der Arbeit mit cross-language-solutions.
C# und die CLR selbst auf groß-und Kleinschreibung; VB.NET nicht. Je nachdem, auf welche Art und Weise Sie verbraucht sind die Bibliothek, eine Ausnahme kann geworfen werden, weil der Fall nicht entspricht (und daher nicht auf die Behebung einer bekannt geben).
Dies kann geschehen, wenn Sie denken, Sie haben konsequent deklariert Ihrem Namensraum-Namen, aber eine Klasse hat den Namensraum deklariert, mit eine Zeichen in Großbuchstaben. Dies ist sehr einfach zu tun, in Visual Basic, aber zu VB.NET sehen Sie alle, wie Sie schon zusammengestellt zu einer einzigen, zusammenhängenden namespace. Soweit die CLR ist besorgt, jedoch sind Sie zwei unterschiedliche namespaces.
Ich habe laufen in dieses Problem vor, und es war ein sehr schwer Fehler aufzuspüren.
Ich weiß, du bist verbraucht ein C# - Projekt aus VB.NET, aber halten Sie ein Auge für diese Art von Fragen.
Es funktioniert für mich:
(Ich don ' T haben Ihre
t_Quote
Typ)Auch, es ist schrecklich Praxis um eine Art Namen wie
t_Quote
. Dass genannt werden sollteQuote
; die Ungarische notation und Unterstriche sind beides verpönt in C# Namen.