Honore
Honore

Reputation: 63

How to build a conditional query in MongoDB C#

I am having trouble building a conditional query using C# MongoDB driver. Whenever I run the code below, I get an empty list. Any help will be greatly appreciated.

Here is my function

 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);
        }                                
    }

Upvotes: 1

Views: 1836

Answers (1)

Bilgehan
Bilgehan

Reputation: 1227

You can use IMongoCollection to get your collection and then use 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();

Upvotes: 1

Related Questions