如何正确返回“CarTypes”对象列表(来自第二种方法),其中传入的TyreID不是CarType类的主键 - 例如,我想返回一个列表在所有CarTypes中,TyreID为5:
// GET api/CarTypes
public IEnumerable<CarTypes> GetCarTypes()
{
return db.CarTypes.AsEnumerable(); //This works fineCar
}
// GET api/CarTypes/5
public IEnumerable<CarTypes> GetCarTypes(long id)
{
CarTypes cartypes = db.CarTypes.Select(t => t.TyreID == id).AsEnumerable();
if (roomtypes == null)
{
throw new HttpResponseException(Request
.CreateResponse(HttpStatusCode.NotFound));
}
return cartypes;
}
目前显示错误:
无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'MvcApplication4.Models.CarTypes'。存在显式转换(您是否错过了演员?)
如果我在查询中使用Select / SelectMany / Where,这是否重要?
答案 0 :(得分:7)
首先,您需要使用Where
代替Select
;其次,在您将其更改为Where之后,您不需要使用AsEnumerable(),但您可能必须调用ToList(),以便Linq2Sql / EntityFramework在将值返回到视图之前执行查询。 / p>
// GET api/CarTypes/5
public IEnumerable<CarTypes> GetCarTypes(long id)
{
var cartypes = db.CarTypes.Where(t => t.TyreID == id).ToList();
if (cartypes == null || !cartypes.Any())
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return cartypes;
}
我在查询执行后还添加了一个额外的检查,但您可能不需要这个,具体取决于您希望如何处理空集合。
答案 1 :(得分:1)
您应该使用“Where”而不是“Select”。
CarTypes cartypes = db.CarTypes.Where(t => t.TyreID == id).AsEnumerable();
“选择”用于指定应为每个记录返回哪些数据,而不是用于过滤记录。使用“Select”的查询返回布尔值:对于TyreID!= id的记录为false,对于TyreID = id的一条记录为true:)
答案 2 :(得分:1)
你不应该:
IEnumerable<CarTypes> cartypes = db.CarTypes.Where(t => t.TyreID == id).AsEnumerable();
而不是:
CarTypes cartypes = db.CarTypes.Select(t => t.TyreID == id).AsEnumerable();
注意:我会根据PanJanek的回答发表评论,但由于我的声誉不高,我现在不允许这样做......