此函数用于返回用户搜索输入的联系人列表。搜索词的数量始终至少为一个,但也可以为多个。
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 看起来正确(因为针对术语数量生成了正确数量的子句),但仅使用了最后一个搜索术语。
示例 - 如果我传递两个术语(“and”、“sam”),生成的 sql 将按预期显示两个子句块,但仅使用“sm”作为两个块中的参数。
我究竟做错了什么?我应该使用 SqlMethods 吗?
也许问题在于捕获循环变量项。
尝试这个:
foreach (string term in searchTerms)
{
string t = term;
contacts = ... // use t instead of term
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)