Search code examples
c#.netlinqlinqkit

Combine Expression to create a predicate with linqkit


I have this predciate, I would like build it with linqkit because the predicate can change depending of options.

.Where(p => p.FirstName == "John" && p.LastName == "Doe" && ((p.Age > 30 || p.Status >= 10)));

I tried :

var predicate = PredicateBuilder.New<Person>();
var orPredicate = PredicateBuilder.New<Person>();

orPredicate.Or(p => p.Age > 30);
orPredicate.Or(p => p.Status >= 10);

Predicate.And(p => p.FirstName == "John");
Predicate.And(p => p.LastName == "Doe");

predicate = predicate.Or(orPredicate);
myQueryable = myQueryable.Where(predicate);

When I do this the result is like a "Or" between each(4) conditions. Am I missed something?

Thanks,


Solution

  • Looking at the docs, I think your snippet can be fixed like so:

    var predicate = PredicateBuilder.New<Person>();
    var orPredicate = PredicateBuilder.New<Person>();
    
    orPredicate = orPredicate.Start(p => p.Age > 30);
    orPredicate = orPredicate.Or(p => p.Status >= 10);
    
    predicate = predicate.Start(p => p.FirstName == "John");
    predicate = predicate.And(p => p.LastName == "Doe");
    
    predicate = predicate.And(orPredicate);
    myQueryable = myQueryable.Where(predicate);
    

    Mind that I have Zero experience with LinqKit and derived this just from referenced docs.