«объект» веб-API не содержит определения для «ToList»

Я действительно не могу понять, что я здесь упустил.
Это код, который я рефакторинг от GET к POST по просьбе другой стороны разработки проекта.

        using VirtualAssistant.Models;
        using VirtualAssistant.DataModel;
        using System;
        using System.Collections.Generic;
        using System.Configuration;
        using System.Linq;
        using System.Net;
        using System.Net.Http;
        using System.Web.Http;
        using System.Data;
        using System.Data.Entity;
        using System.Data.Entity.Infrastructure;
        using System.Web.Http.Description;
        using System.Collections;

    namespace LloydsVirtualAssistant.Controllers
    {
        public class FetchController : ApiController
        {

            public class PersonList

            {
                public int ClientID { get; set; }
                public int PersonId { get; set; }
                public string FullName { get; set; }
                public string EmailAddress { get; set; }
                public string BusinessNumber { get; set; }
                public string MobileNumber { get; set; }
                public int LocationId { get; set; }
            public int BuidlingId { get; set; }
            public string LocationAddress { get; set; }
            public string PostCode { get; set; }
            public string BranchSortCode { get; set; }
            public string AreaName { get; set; }
        }




        // GET: ChatAi/Person/5
        [Route("FetchPerson")]

        public HttpResponseMessage POST([FromBody] PersonList PersonId)
        {
            List<PersonList> results = new List<PersonList>();
            var result = new FetchDataContext().usp_FetchPerson_GetById(PersonId).ToList();

            foreach (var item in result.ToList())
            {
                results.Add(new PersonList
                {
                    ClientID = (int)item.ClientID,
                    PersonId = (int)item.PersonId,
                    FullName = item.FullName,
                    EmailAddress = item.EmailAddress,
                    BusinessNumber = item.BusinessPhone,
                    MobileNumber = item.MobileNumber,
                    LocationId = (int)item.LocationId,
                    BuidlingId = (int)item.BuildingId,
                    LocationAddress = item.LocationAddress,
                    PostCode = item.PostCode,
                    BranchSortCode = item.BranchSortCode,
                    AreaName = item.AreaName
                });
            }
            {
                return results;
            }
        }
    }
}

Ошибка читается

Серьезность
Код Описание Ошибка состояния подавления строки файла проекта CS1061 'object' не содержит определения для 'ToList', и не может быть > найден метод расширения 'ToList', принимающий первый аргумент типа 'object' (вы пропустили? директива using или ссылка на сборку?) > VirtualAssistant.....

Первоначально это работало как GET, но команда хочет POST. Моя попытка рефакторинга провалилась. Я, конечно, продолжу искать, интересно, сможет ли кто-нибудь из вас, профессионалы, заметить мою ошибку? Это мой первый веб-API — ну, если не считать GET, который работал. Моя область знаний — SQL, я просто изучаю ASP.NET (и люблю его)

Заранее большое спасибо, что заглянули.


person Leigh Noel Purdie    schedule 06.04.2018    source источник
comment
Я удивлен, что это даже компилирует usp_FetchPerson_GetById(PersonId), поскольку PersonId имеет тип PersonList (см. ваши входящие параметры).   -  person Igor    schedule 06.04.2018
comment
Также цепочка new FetchDataContext - плохая идея, поскольку вы не удаляете контекст данных. Это означает, что ваши подключения к данным могут оставаться открытыми до тех пор, пока контекст в конечном итоге не будет удален сборщиком мусора CLR, который не является детерминированным.   -  person Igor    schedule 06.04.2018
comment
Добрый день Игорь! Отличный совет. Обязательно займусь этим сегодня. И нет, он не будет компилироваться, так как я изменил свой рабочий GET и попытался создать POST. Но вчера провел чтение старой школы и онлайн-курс. Надеюсь, что смогу стать новичком в С# за выходные. Спасибо!!   -  person Leigh Noel Purdie    schedule 08.04.2018


Ответы (1)


Здесь вы извлекаете один элемент:

var result = new FetchDataContext().usp_FetchPerson_GetById(PersonId).ToList();

Вы можете использовать ToList() только для IEnumerable или коллекции, массива и т. д.

Вместо этого попробуйте следующее:

var person = new FetchDataContext().usp_FetchPerson_GetById(PersonId);
if (person != null) {
    results.Add(person);
}
person Isma    schedule 06.04.2018
comment
Большое вам спасибо, я провел весь субботний день, делая шаг назад и изучая это с самого начала. 5-часовой онлайн-курс стоил того, чтобы не углубляться в него и не копаться в нем. Совершенно случайно стал разработчиком API, мой опыт работы с SQL. Я очень ценю обратную связь, поэтому мне не нужно начинать с нуля сегодня, исправляя это. Спасибо - person Leigh Noel Purdie; 08.04.2018