我有一个WebAPI方法,该方法返回这样编写的“复杂”对象的IQueryable:
[Route("api/INV_API/deptSelect")]
public IQueryable<DEPTNAME_DESCR> GetDistinctDeptSelect([FromUri] string q)
{
if (q != null)
{
var query = (from d in db.DEPTs
where d.DESCR.Contains(q) || d.DEPTNAME.Contains(q)
select new DEPTNAME_DESCR { DEPTNAME = d.DEPTNAME, DESCR = d.DESCR }).Distinct();
return query;
}
else
{
var query = (from d in db.DEPTs
select new DEPTNAME_DESCR { DEPTNAME = d.DEPTNAME, DESCR = d.DESCR }).Distinct();
return query;
}
}
当使用AJAX从此方法获取时,我会收到类似这样的javascript数组:
我有另一个WebAPI方法,该方法试图返回一个IQueryable<string>
形式的字符串列表:
[HttpGet]
[Route("api/INV_API/requesterIdSelect2")]
public IQueryable<string> GetListOfUserId([FromUri] string q)
{
var result = db.Database.SqlQuery<string>("SelectUSERIDFromSM @searchterm", new SqlParameter("@searchterm", q)).ToList();
return result.AsQueryable<string>();
}
但是,当我检查AJAX GET返回的内容时,它看起来像这样:
我试图了解第二种方法中我做错了什么。我要返回的东西都必须序列化吗?还是我的SQL查询本身有问题。
如果这还不够,我将提供更多信息。
答案 0 :(得分:0)
像这样更新您的方法:
[HttpGet]
[Route("api/INV_API/requesterIdSelect2")]
public IEnumerable<string> GetListOfUserId([FromUri] string q)
{
var result = db.Database.SqlQuery<string>("SelectUSERIDFromSM @searchterm", new SqlParameter("@searchterm", q)).ToList();
return result;
}
IQueryable代表存储的查询,而不是查询返回的结果。要执行查询,您必须像在第一个代码段中那样执行ToList
或Distinct
之类的方法