2016-08-02 4 views
0

Der Code, den ich im Moment bin auf nutzt die C# Mongo Fahrer und ich viele einfache Sachen wie dieseErste Ergebnisse aus Liste <IMongoQuery>

var query = Query.EQ("SomeBooleanField", false); 
return Collection.FindAs<MyType>(query); 

ich eine Anforderung haben, eine Abfrage zu schreiben, die dynamisch ist , dh die Anzahl der AND-Klauseln variiert. Also bin ich mit so etwas wie dieses -

var andList = new List<IMongoQuery>(); 
if (whatever) 
    andList.Add(Query.EQ("Field1", true)); 

if (suchandsuch) 
    andList.Add(Query.EQ("Field2", false)); 

var query = new QueryBuilder<MyType>(); 
query.And(andList); 

Also meine Frage ist, was kann ich tun, mit Abfrage um einige Ergebnisse aus ihm heraus zu bekommen? Ich möchte eine Liste oder IEnumerable.

Ich kann keine nützlichen Beispiele online finden und die Treiberdokumentation ist nicht allzu hilfreich. Jede Hilfe dankbar geschätzt.

+0

können Sie Ihren ganzen Code schreiben. Kannst du 'Abfrage' nicht in einer Sammlung ablegen? Find (query) .ToListAsync(); ?? – Newton

+0

Hallo, kann nicht Code wegen der IP-Probleme des Kunden eingeben. Aber, wenn ich das tue - var query = neuer QueryBuilder (); query.And (undList); Rückgabe Collection.FindAs (Abfrage); Ich erhalte einen Fehler - MongoDb.Driver.Builders.QueryBuilder ist nicht Parametertyp 'MongoDb.Driver.IMongoQuery' zuweisbar. ... (auch die Variable 'Collection', die ich verwende, hat keine 'Find'-Methode). – EyeHefBee

+0

Ich habe einen Beispielcode in einer Antwort gepostet. Bitte kommentieren Sie dazu – Newton

Antwort

0

Haben Sie nach diesem Format

var collection = _database.GetCollection<BsonDocument>("MyCollection"); 
var builder = Builders<BsonDocument>.Filter; 
var filter = builder.Eq("param1", "value1") & builder.Eq("param2", "value2"); 
var result = await collection.Find(filter).ToListAsync(); 

Sie bekommen einen Fehler versucht, weil Sie nicht die FindAS können <>() wird diesem Fall

+0

In meinem ursprünglichen Beitrag hat die Variable 'Collection', die ich verwende, keine 'Find'-Methode. Wenn ich den Code oben versuche, sagt es mir, dass "Filter" eine FilterDefinition ist und ich versuche, es in Find() zu übergeben, wo Find() eine IMongoQuery erwartet. – EyeHefBee

Verwandte Themen