1

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

4

3 回答 3

9

首先,您需要使用Where而不是Select; 其次,在将 AsEnumerable() 更改为 Where 后,您不需要使用它,但您可能必须调用 ToList() 以便 Linq2Sql/EntityFramework 在将值返回到视图之前执行查询。

 // 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;
    }

我还在查询执行后添加了一个额外的检查,但你可能不需要这个,这取决于你想如何处理一个空集合。

于 2012-06-08T10:31:14.417 回答
1

你不应该有:

IEnumerable<CarTypes> cartypes = db.CarTypes.Where(t => t.TyreID == id).AsEnumerable();

代替:

CarTypes cartypes = db.CarTypes.Select(t => t.TyreID == id).AsEnumerable();

注意:我会在 PanJanek 的回答下发表评论,但由于我的声誉低下,我目前不被允许...

于 2012-06-08T10:28:01.320 回答
1

您应该使用“Where”而不是“Select”。

CarTypes cartypes = db.CarTypes.Where(t => t.TyreID == id).AsEnumerable();

“选择”用于指定应为每条记录返回哪些数据,而不是用于过滤记录。您使用“Select”的查询返回布尔值:对于 TyreID != id 的记录为 false ,对于 TyreID = id 的一条记录为 true :)

于 2012-06-08T10:08:57.850 回答