我正在尝试(/ api / data?name = storm,bcam& tag = 78473TAC4,12669VAC2),但它不断输出“无数据响应”。客户端的消息。
我用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);
}
非常感谢任何帮助。谢谢。
答案 0 :(得分:0)
我建议使用SQL Profiler或EFProf等分析工具来查看您的查询实际生成的SQL。从那里开始排除故障应该更容易。
答案 1 :(得分:0)
我看到一个潜在的错误。
你的第二个if块(过滤标签)实际上是“过滤掉”你从第一个块获得的结果!如此有效,您正在进行“与”操作。这与您的SQL查询正在执行的操作不同。
有效地,阅读你的两个如果这样的块:
data = data.Where(c => list.Any(a => c.NAME.Contains(nameArg)).Where(c => list.Any(a => c.TAG.Contains(tagArg)));
相反,两个if块理想地应该在“originalData”上工作,然后将匹配合并到“resultData”。
这就是你所需要的。 RITE?