ASP.Net MVC Web API返回对象列表

时间:2012-06-08 10:04:07

标签: asp.net asp.net-mvc asp.net-web-api

如何正确返回“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,这是否重要?

3 个答案:

答案 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的回答发表评论,但由于我的声誉不高,我现在不允许这样做......