Каков правильный способ динамического добавления неопределенного количества предложений в запрос Linq 2 Sql?

Эта функция используется для возврата списка контактов для ввода поиска пользователей. Число условий поиска всегда равно минимум одному, но может быть много.

public IList<Contact> GetContacts(string[] searchTerms)
{
    using (dbDataContext db = new dbDataContext())
    {
        var contacts = from _contacts in db.Contacts
                       orderby _contacts.LastName ascending, _contacts.FirstName ascending
                       select _contacts;

        foreach (string term in searchTerms)
        {
            contacts = (IOrderedQueryable<Contact>)contacts.Where(x => SqlMethods.Like(x.FirstName, "%" + term + "%")
                                                                    || SqlMethods.Like(x.MiddleName, "%" + term + "%")
                                                                    || SqlMethods.Like(x.LastName, "%" + term + "%")
                                                                    || SqlMethods.Like(x.PreferredName, "%" + term + "%"));
        }

        return contacts.ToList<Contact>();
    }
}

Проблема в цикле. Когда-либо используется только последний поисковый запрос, даже если сгенерированный sql выглядит правильно (поскольку для количества терминов создается правильное количество предложений).

Пример - если я передаю два термина ('andr', 'sm '), сгенерированный sql показывает два блока предложений, как ожидалось, но использует только "sm" в качестве параметра в обоих блоках.

Что я делаю не так? Стоит ли мне вообще использовать SqlMethods?

5
задан IckleMonkey 15 September 2010 в 14:06
поделиться