此函数用于返回用户搜索输入的联系人列表.搜索词的数量始终至少为一,但可能很多.
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>();
}
}
Run Code Online (Sandbox Code Playgroud)
问题出在循环中.即使生成的sql看起来是正确的,也只使用了最后一个搜索词(就像为术语数生成了正确数量的子句一样).
示例 - 如果我传递两个术语('andr','sm'),生成的sql显示两个子句块,但只使用'sm'作为两个块中的param.
我究竟做错了什么?我应该使用SqlMethods吗?