gpt4 book ai didi

c# - 将不确定数量的子句动态添加到 Linq 2 Sql 查询的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:18:52 26 4
gpt4 key购买 nike

此函数用于返回用户搜索输入的联系人列表。搜索字词的数量始终至少为一个,但也可以为多个。

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 会显示两个子句 block ,但在两个 block 中仅使用“sm”作为参数。

我做错了什么?我应该使用 SqlMethods 吗?

最佳答案

也许问题在于捕获循环变量项。试试这个:

foreach (string term in searchTerms) 
{
string t = term;
contacts = ... // use t instead of term
}

关于c# - 将不确定数量的子句动态添加到 Linq 2 Sql 查询的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com