2016-04-20 2 views
0

У меня возникли проблемы с созданием условного запроса с использованием драйвера C# MongoDB. Всякий раз, когда я запускаю код ниже, я получаю пустой список. Любая помощь будет оценена.Как построить условный запрос в MongoDB C#

Вот моя функция

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

, что происходит, когда вы на самом деле пройти через код, используя отладчик ..? каковы значения 'queryString', можете ли вы хотя бы показать нам, что ..? также вы можете преобразовать условное выражение if, чтобы использовать оператор switch() {case} .. вам нужно предоставить дополнительную информацию .. – MethodMan

ответ

0

Вы можете использовать IMongoCollection, чтобы получить свою коллекцию, а затем использовать AsQueryable

 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(); 
Смежные вопросы