Если вы пытаетесь использовать его с List<T>
, я бы не стал использовать деревья выражений для начала:
public static Func<T, bool> Or<T>(Func<T, bool> predicate1,
Func<T, bool> predicate2)
{
return t => predicate1(t) || predicate2(t);
}
public static Func<T, bool> And<T>(Func<T, bool> predicate1,
Func<T, bool> predicate2)
{
return t => predicate1(t) && predicate2(t);
}
Тогда вы можете сделать:
Func<Person, bool> isAdult = person => person.Age > 18;
Func<Person, bool> isInParis = person => person.Location == "Paris";
var personInParis = And(isAdult, isInParis);
Эквивалент для деревьев выражений, если вы хотите их позже, посмотрите на PredicateBuilder
.
Сложный бит, вероятно, будет преобразовывать вашу строку в дерево выражений для начала.
Если Dynamic LINQ делает все, что вы хотите иначе , вы можете просто использовать AsQueryable
для создания IQueryable<T>
из IEnumerable<T>
.