0

Can someone tell me how to search data in liteDb using the following pseudocode ?

Pseudo Code

col = db.GetCollection<Product>("products");
string keyword = "1AS";

Query query;

if (condition1)
{
    query += Query.Contains("ProductName", keyword);
}

if (condition2)
{
    query += Query.Contains("ProductModel", keyword);
}

if (condition3)
{
    query += Query.Contains("Note", keyword);
}


if (query.Any()) //
{
    var data = col.Find(query).toList();
}

Thanks in advance

toumir
  • 621
  • 6
  • 17

1 Answers1

2

You can use Query.And(params Query[] queries), like this:

var list = new List<Query>();

if (condition1)
{
    list.Add(Query.Contains("ProductName", keyword));
}
if (condition2)
{
    list.Add(Query.Contains("ProductModel", keyword));
}

...

if (list.Count > 0) //
{
    var q = list.Count == 1 ? list.First() : Query.And(list.ToArray());

    var data = col.Find(q);
}
mbdavid
  • 1,076
  • 7
  • 8
  • sorry sir, when I run the app I get this Error, "System.ArgumentException: At least two Query should be passed" I'm missing something ? – toumir Jul 01 '18 at 20:10
  • to get this working it must check the item count: if(list.Count==1) { db.GetCollection().Find(list.First()); } else if(list.Count> 1) { db.GetCollection().Find(Query.Or(list.ToArray())); } – toumir Jul 01 '18 at 20:40