2016-12-29 1 views
0

Mit dem C# Treiber von MongoDB, können wir folgendes tun: , wenn Sie mit einem Typ T handelt, die das Feld hat _.id, können Sie einen Filter wie folgt aufbauen:MongoDB C# Filterhülle

var F = Builders<T>.Filter.Eq(_ => _._id, Value); 

ich brauche eine Funktion zu machen, wählt ein Feld von T, wie die _ => Teil _.id tut, als Parameter, wie das funktionieren würde:

myfunc<T>(SOMETYPETHATSELECTSAFIELDOFT N, string V) 
{ 
    var F = Builders<T>.Filter.Eq(N, V); 
} 

Ich weiß, dass MongoDB die Felder mit Namen unterstützt, aber in diesem Fall kann ich das nicht verwenden.

Ich sehe mir Mongo C# -Treiber an, aber ich kann nicht wirklich verstehen, wie es gemacht wird.

+0

Warum möchten Sie nicht fließend Schnittstelle verwenden? mycollection.Find (x => x.MyProperty == "MyValue") Was ist Ihr Anwendungsfall? Sicher, Sie könnten einen Ausdruck erstellen, der Ihre Eigenschaft mit dem Namen, die Frage ist, wenn Sie es wirklich brauchen –

+0

haben Sie versucht, eine wo Schlüsse auf Ihre Methode, wo Sie möglicherweise implementieren und Schnittstelle, die die Eigenschaft Zeichenfolge _id haben. .so muss jede Klasse T, die an Ihre Methode übergeben wurde, diese Schnittstelle und das Feld _id? –

+0

@Maksim: Ich habe überhaupt nicht über die fließende Oberfläche nachgedacht, ich werde es mir ansehen; Der Anwendungsfall ist hier, dass 1) der Feldname direkt verwendet werden sollte, vom Compiler verifiziert, da wir in der Vergangenheit Fehler bei der Eingabe des Namens als String hatten und 2) einige Aufrufe tatsächlich gar nicht nach Mongo gehen (und I Ich muss herausfinden, welches Feld wir als sekundäres Problem behandeln müssen. – Thomas

Antwort

0

Ich habe es durch den Einsatz zu arbeiten:

myfunc(Expression<Func<T, string>> N, string V) 

ich die Antwort statt Schließen der Frage veröffentlicht, sobald ich das irgendwo nicht sehen dokumentiert und es kann jemand helfen.