public override Expression Predicate() { var list = Inner.Cast <MatchNode>().Select(i => i.Predicate()).ToList(); var expression = Expression.OrElse(list.Skip(0).First(), list.Skip(1).First()); foreach (var i in list.Skip(2)) { expression = Expression.OrElse(expression, i); } return(expression); }