2016-04-20 16 views
0

Ich habe Probleme beim Erstellen einer bedingten Abfrage mit C# MongoDB-Treiber. Wenn ich den Code unten ausführe, erhalte ich eine leere Liste. Jede Hilfe wird sehr geschätzt.Erstellen einer bedingten Abfrage in MongoDB C#

Hier ist meine Funktion

public async void searchBook() 
{ 
     Book book = new Book(); 

     IMongoDatabase mdb = MongoDBConnectionManager.ConnectToMongoDB(); 

     var query = new BsonDocument();    

     if (queryString.ContainsKey("Title")) 
     { 
      query.Add("Title", queryString["Title"]); 
     } 

     if (queryString.ContainsKey("ISBN")) 
     { 
      query.Add("Isbn", queryString["ISBN"]); 
     } 

     if (queryString.ContainsKey("Author")) 
     { 
      query.Add("Author", queryString["Author"]); 
     } 

     if (queryString.ContainsKey("Publisher")) 
     { 
      query.Add("Publisher", queryString["Publisher"]); 
     } 

     var collection = mdb.GetCollection<Book>("Book"); 

     var sort = Builders<Book>.Sort.Ascending("Title"); 

     if(query.ElementCount > 0) 
     { 
      var list = await collection.Find(query).Sort(sort).ToListAsync(); 
      dt = ConvertToDataTable(list); 
      BindGridView(dt); 
     } 
     else 
     { 
      var list = await collection.Find(Builders<Book>.Filter.Empty).Sort(sort).ToListAsync(); 
      dt = ConvertToDataTable(list); 
      BindGridView(dt); 
     }         
    } 
+1

was passiert, wenn Sie tatsächlich Schritt durch den Code der Debugger ..? Was sind die Werte des 'queryString'? Kannst du uns das wenigstens zeigen? Sie können auch die if-Bedingungsanweisung in eine switch() {case} -Anweisung konvertieren. Sie müssen mehr Informationen bereitstellen. – MethodMan

Antwort

0

Sie können IMongoCollection benutzen, um Ihre Sammlung zu bekommen und dann AsQueryable verwenden

 var query = collection.AsQueryable(); 

     if (!string.IsNullOrEmpty(entity.Name)) 
      query = query.Where(p => p.Name.Contains(entity.Name)); 

     if (!string.IsNullOrEmpty(entity.Description)) 
      query = query.Where(p => p.Description.Contains(entity.Description)); 

     var YourList=query.ToList();