我想从.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(中获取数据,并将其存储在我的模型中。我不清楚.NET框架API应该如何一步一步地工作,以及如何实现等待异步。
首先,要修复Task
问题,您需要等待它,因此您的方法签名需要更改为async
方法:
public async Task<IHttpActionResult> getAllDataCars()
别担心,它仍然会按预期工作。ASP.NET知道这是什么。
然后你可以await
你正在调用的异步方法:
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();
如果您确实想要一个CARS列表,那么您需要将dataAPICars
更改为List<Model> dataAPICars
,而不是Model dataAPICars
。然后,您可以返回该列表而不是单个项目,当然还可以将检查从dataAPICars != null
更改为dataAPICars.Any()
,等等。
如果你想要其他东西,恐怕你必须弄清楚你的汽车清单是如何变成一辆车的。