Combine Expression to create a predicate with linqkit

132 Views Asked by At

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,

1

There are 1 best solutions below

0
Fildor On BEST ANSWER

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.