Объединить предикаты LINQ-to-SQL в один предикат

(Предыдущий вопрос,Рекурсивно (?) Объединять предикаты LINQ в один предикат, похоже на это, но я фактически задал неправильный вопрос ... решение там удовлетворило поставленный вопрос, но на самом деле это не то, что мне нужно. Хотя они разные. Honest.)

Учитывая следующий текст поиска:

"keyword1 keyword2 ... keywordN"

Я хочу закончить со следующим SQL:

SELECT [columns] FROM Customer 
  WHERE (
        Customer.Forenames LIKE '%keyword1%' 
        OR 
        Customer.Forenames LIKE '%keyword2%'
        OR
        ...
        OR
        Customer.Forenames LIKE '%keywordN%'
    ) AND (
        Customer.Surname LIKE '%keyword1%' 
        OR 
        Customer.Surname LIKE '%keyword2%'
        OR
        ....
        OR
        Customer.Surname LIKE '%keywordN%'
    )

По сути, мы разбиваем текст поиска на пробелы, обрезаем каждый токен, строим из нескольких частей предложение OR на основе каждого, а затем объединяем предложения AND.

Я делаю это в Linq-to-SQL, и я не знаю, как динамически составлять предикат на основе произвольно длинного списка субпредикатов. Для известного количества предложений легко составить предикаты вручную:

dataContext.Customers.Where(
    ( 
      Customer.Forenames.Contains("keyword1") 
      ||
      Customer.Forenames.Contains("keyword2")
    ) && (
      Customer.Surname.Contains("keyword1") 
      ||
      Customer.Surname.Contains("keyword2")
    )
);

Короче говоря, мне нужен метод, который при двух предикатах возвращает один предикат, составляющий два исходных предиката с предоставленным оператором, но ограниченный операторами, явно поддерживаемыми Linq-to-SQL. Есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос