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