Эта функция используется для возврата списка контактов для ввода поиска пользователей. Число условий поиска всегда равно минимум одному, но может быть много.
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?