gpt4 book ai didi

c# - 使用 Linq To SQL 搜索字段中的多个字符串

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:05 25 4
gpt4 key购买 nike

我正在尝试使用 Linq to SQL 在文本列中搜索多个匹配词,但查询未达到我的预期。

这是我的示例代码:

            string[] nameSearch = new string[2];
nameSearch[0] = "John";
nameSearch[1] = "Doe";

var customers = context.Customers.AsQueryable();
foreach (string name in nameSearch)
{
customers = customers.Where(r => r.CustName.Contains(name));
}
Data.Customer[] results = customers.ToArray();

运行的查询是:

    SELECT [t0].[CustName]
FROM [dbo].[Customer] AS [t0]
WHERE ([t0].[CustName] LIKE @p0) AND ([t0].[CustName] LIKE @p1)
-- @p0: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [%Doe%]
-- @p1: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [%Doe%]

如何修复此查询? (它应该是在搜索 John 和 Doe,而不是 Doe 和 Doe。)

最佳答案

您的 lambda 表达式仅在查询运行时进行评估,即在调用 ToArray() 期间。届时,name 将绑定(bind)到数组中的最后一项。

您可以在 foreach 循环中使用局部变量,以避免在 lambda 表达式中引用外部 name 变量:

var customers = context.Customers.AsQueryable();
for (string name in nameSearch) {
string curName = name;
customers = customers.Where(r => r.CustName.Contains(curName));
}
Data.Customer[] results = customers.ToArray();

关于c# - 使用 Linq To SQL 搜索字段中的多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369035/

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