2012-06-08 6 views
1

Как правильно вернуть список объектов «CarTypes» (из второго метода), где передаваемый TyreID не является первичным ключом класса CarType - так, например, я хочу, чтобы вернуть список всех CarTypes, где TyreID составляет 5:ASP.Net MVC Web API Возвратный список объектов

// 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 в запросе?

ответ

7

Во-первых, вам нужно использовать 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; 
    } 

Я также добавил в дополнительной проверке после того, как запрос был выполнен, но вы, возможно, не нужно это в зависимости от того, как вы хотите обрабатывать пустую коллекцию.

+0

Hi @WestDiscGolf - VS (2012 RC) показывает ошибку на db. CarTypes ... Невозможно неявно преобразовать тип 'System.Collections.Generic.List ' в 'MvcApplication4.Models.cartypes – Mark

+0

Исправлено; см. править. Изменено объявление переменной в var. – WestDiscGolf

+0

спасибо большое. Mark – Mark

1

Вы должны использовать «Где» вместо «Выбрать».

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

«Select» для определения того, какие данные должны быть возвращены для каждой записи, а не для фильтрации записей. Ваш запрос с «Select» возвращает логические значения: ложь для записей с TyreID = ид и верно для одной записи, где TyreID = идентификатор :)

+0

также, не хотите ли возвращать файлы .AsEnumerable() –

+0

Привет - У меня есть .AsEnumerable() в конце инструкции Linq - но добавляю ли я файлы с изображениями. AsEnumerable() или нет, ошибка по-прежнему остается в выражении linq. Еще раз спасибо, Марк. – Mark

1

Вы не должны иметь:

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

Вместо:

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

Примечание: Я бы сделал это комментарий под ответ PanJanek, но я не currenlty позволил моей: из-низкой репутации ...

+0

Большое спасибо - это то, чего мне не хватало (IEnumerable в начале линии) - PanJanek/Mike - спасибо также за помощь - приветствия, Mark – Mark

Смежные вопросы