WebAPI返回一个IQueryable,就像数组是javascript

时间:2018-09-27 09:06:12

标签: javascript asp.net ajax asp.net-web-api2

我有一个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数组:

enter image description here

我有另一个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返回的内容时,它看起来像这样: enter image description here

我试图了解第二种方法中我做错了什么。我要返回的东西都必须序列化吗?还是我的SQL查询本身有问题。

如果这还不够,我将提供更多信息。

1 个答案:

答案 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代表存储的查询,而不是查询返回的结果。要执行查询,您必须像在第一个代码段中那样执行ToListDistinct之类的方法