如何使用contain子句查询多个参数
本文关键字:参数 查询 子句 何使用 contain | 更新日期: 2023-09-27 18:00:37
我正在尝试(/api/data?name=storm,bcam&tag=78473TAC412669VAC2),但它一直输出"无数据响应"消息
我用sql测试了同一个查询,它输出了10条记录。
select *
from [dbo].[database_bd]
where TAG like '%78473TAC4%'
or TAG LIKE '%012669VAC2%'
OR NAME LIKE '%BCAM%'
OR NAME LIKE '%STORM%'
我尝试了许多不同的方法来返回数据并将其添加到列表中,但总是收到"无数据"的消息。
var data = db.database_bd.AsQueryable();
if (query.startDate != null)
{
data = data.Where(c => c.UploadDate >= query.startDate);
}
if (!string.IsNullOrEmpty(query.name))
{
var list = query.name.Split(',');
foreach (string i in list)
{
data = data.Where(c => list.Any(a => c.NAME.Contains(i)));
}
}
if (!string.IsNullOrEmpty(query.tag))
{
var list = query.tag.Split(',');
foreach (string i in list)
{
data = data.Where(c => list.Any(a => c.TAG.Contains(i)));
}
}
if (!data.Any())
{
var message = string.Format("No data found");
return Request.CreateErrorResponse(HttpStatusCode.NotFound, message);
}
return Request.CreateResponse(HttpStatusCode.OK, data);
}
如有任何帮助,我们将不胜感激。非常感谢。
我看到了一个潜在的错误。
你的第二个if块(在Tag上过滤)实际上是"过滤掉"你从第一个if块得到的结果!!因此,有效地说,您正在执行"与"运算。这与您的SQL查询正在执行的操作不同。
有效地,像这样读取你的两个if块:
data = data.Where(c => list.Any(a => c.NAME.Contains(nameArg)).Where(c => list.Any(a => c.TAG.Contains(tagArg)));
相反,理想情况下,两个if块都应该处理"originalData",然后将匹配项合并到"resultData"。
这正是你所需要的。仪式
我建议使用像SQL Profiler或EFProf这样的分析工具来查看查询实际生成的SQL。从那里应该可以更容易地进行故障排除。