WebAPI возвращает IQueryable, который похож на массив javascript - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть один метод 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 для GET из этого метода я получаю некоторый вид массива 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 голосов
/ 27 сентября 2018

Обновите свой метод следующим образом:

[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, как у вас в первом фрагменте кода

...