Linq PredicateBuilder - несколько ORs

Я пытаюсь использовать PredicateBuilder, как описано здесь - http://www.albahari.com/nutshell/predicatebuilder.aspx

Следующий код

var predicate = PredicateBuilder.False<StreetDTO>();

        predicate = predicate.Or(p => p.Locality.Contains(criteria.Locality));
        predicate = predicate.Or(p => p.Name.Contains(criteria.Name));
        predicate = predicate.Or(p => p.Town.Contains(criteria.Town));

        List<StreetDTO> streetData = StreetData.Instance();

        var streetList = from street in streetData.Where(predicate)
                         select street;

насколько я вижу, это должно работать, в соответствии с примером

var newKids  = Product.ContainsInDescription ("BlackBerry", "iPhone");

var classics = Product.ContainsInDescription ("Nokia", "Ericsson")
                      .And (Product.IsSelling());
var query =
  from p in Data.Products.Where (newKids.Or (classics))
  select p;

но все, что я получаю, это

Ошибка 1 Аргументы типа для метода "System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable, System.Func) 'не может быть выведенных из использования. Пытаться задание аргументов типа в явном виде.

Я пытаюсь получить некоторое понимание в LINQ 'on-the-job', поэтому извиняюсь, если это простой вопрос.

Ответ 1

А; в вашем списке используются методы расширения IEnumerable<T> (а не IQueryable<T>) - попробуйте:

var streetList = from street in streetData.AsQueryable().Where(predicate)
                 select street;

Ответ 2

Попробуйте выполнить компиляцию вашего предиката:

var streetList = from street in streetData.Where(predicate.Compile())
                 select street;