Often query expressions depend on runtime user input or program state. For example in one instance you may need to query by FirstName while in another instance you need to query by both FirstName and Age. Dynamic runtime queries can be created using a dynamic filtering expression which is passed to the Siaqodb engine as shown in the following example:

    //we will pick random cases
int val = DateTime.Now.Second % 2;

           //declare predicate
           Expression<Func<Employee, bool>> predicate = null;
           if (val == 1)
           { 
               //build a predicate to filter only by FirstName
               predicate = employee => employee.FirstName.Contains("Emp");

               Log("Predicate with only FirstName is activated");
           }
           else if (val == 0)
           {
               //build a predicate to filter by FirstName and Age
               predicate = employee => employee.FirstName.Contains("Emp") && employee.Age > 20;

               Log("Predicate with FirstName and Age is activated");
           }

           var q = siaqodb.Cast<Employee>().Where(predicate).Select(e => e);