Невозможно неявно преобразовать тип Threading.Tasks.Task Моделировать - PullRequest
0 голосов
/ 09 мая 2020

Я хочу получить данные. NET API, который я включил в ссылку. но, к сожалению, я застрял с приведенным ниже исключением.

Ошибка 2 Невозможно неявно преобразовать тип System.Threading.Tasks.Task<System.Collections.Generic.List<BizCover.Repository.Cars.Car>> в BizCover.Api.Cars.Model.CarsVM

вот мой код в контроллере API.

public IHttpActionResult getAllDataCars()
    {
        CarRepository carRep = new CarRepository();

        IHttpActionResult result = null;

        try
        {
            CarsVM dataAPICars = new CarsVM(); 
            dataAPICars = carRep.GetAllCars(); //here's the error return.

            if (dataAPICars != null) 
            {
                var a = "ada";
            }
            else
            {
                var b = "null";
            }
        }
        catch (Exception ex)
        {
            var c = ex.ToString();
        }

        return result;

    }

, а также моя модель

public class CarsVM
{
    public CarsVM()
    {

    }

    public string Colour { get; set; }
    public string CountryManufactured { get; set; }
    public int Id { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public decimal Price { get; set; }
    public int Year { get; set; }

    public CarsVM(string Colour, string CountryManufactured, int Id, string Make, string Model, decimal Price, int Year)
    {
        this.Colour = Colour;
        this.CountryManufactured = CountryManufactured;
        this.Id = Id;
        this.Make = Make;
        this.Model = Model;
        this.Price = Price;
        this.Year = Year;
    }

}

цели здесь: я хочу получить данные из справочника (CarRepository) и сохранить их в моей модели. Я не совсем понимал, как должен работать API. NET Framework, шаг за шагом и как реализовать await asyn c.

1 Ответ

1 голос
/ 09 мая 2020

Во-первых, чтобы исправить проблему Task, вам нужно подождать, поэтому подпись вашего метода должна быть изменена на метод async:

public async Task<IHttpActionResult> getAllDataCars()

Не волнуйтесь - он все равно будет работать по назначению. ASP. NET знает, что это такое.

А затем вы можете await вызываемый метод asyn c:

dataAPICars = await carRep.GetAllCars();

Теперь, это немного изменит вашу основную проблему, но по-прежнему вызовет, по сути, ту же проблему:

Cannot implicity convert type Collection.Generic.List<Model> to Model

Проблема здесь в том, что у вас потенциально много автомобилей в списке, и вы хотите одну машину. Очевидно, что мы не можем преобразовать гараж, полный автомобилей, в одну машину, поэтому C# не может преобразовать список автомобилей в одну машину.

Предполагая, что может быть только одна запись, вы можно использовать SingleOrDefault:

dataAPICars = (await carRep.GetAllCars()).SingleOrDefault();

Если их может быть несколько, но вам нужен только первый / последний, вы должны использовать .FirstOrDefault() или .LastOrDefault():

dataAPICars = (await carRep.GetAllCars()).FirstOrDefault();

Если вам действительно нужен СПИСОК АВТОМОБИЛЕЙ, вам нужно заменить dataAPICars на List<Model> dataAPICars вместо Model dataAPICars. Затем вы можете вернуть этот список вместо одного элемента и, конечно, изменить проверки с dataAPICars != null на dataAPICars.Any(), et c.

Если вам нужно что-то еще, вам придется выяснить Боюсь, как ваш список машин превращается в одну машину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...