【发布时间】:2010-09-15 14:06:48
【问题描述】:
此函数用于为用户搜索输入返回联系人列表。搜索词的数量始终至少为一个,但也可以是多个。
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 将显示两个子句块作为 expeted,但仅使用 'sm' 作为两个块中的参数。
我做错了什么?我什至应该使用 SqlMethods 吗?
【问题讨论】:
-
你说生成的SQL看起来是对的,能贴一下吗?您是否尝试过手动运行生成的 SQL?
-
是的,如果我手动运行它就可以工作,它只是使用数组中的最后一个“术语”作为所有参数的参数。奇怪。
标签: c# .net linq-to-sql