2016-01-26 5 views
0

Я изучаю веб-app 2.0 ASP.NET, а текущий метод CRUD просто выполняет поиск по идентификатору, поэтому я попытался выполнить поиск по названию книги, но я не увенчался успехом.Поиск по имени вместо id

То, что я добавил к WebApiConfig.cs:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{name}", 
    defaults: new { name = RouteParameter.Optional } 
}; 

И часть меня возникли проблемы с:

// GET: api/Books/Name 
[ResponseType(typeof(Book))] 
public IHttpActionResult GetBook(string name) 
{ 
    Book book = from a in db.Books where a.Title == name select a; 

    if (book == null) 
    { 
     return NotFound(); 
    } 
    else 
    { 
     return Ok(book); 
    } 
} 

Однако это позволит мне построить это, на линии, где я пытаясь запустить запрос LINQ, я получаю сообщение об ошибке: Cannot implicitly convert type 'System.Linq.IQueryable<BookService.Models.Book>'to 'BookService.Models.Book'.

Я попытался изменить запрос вокруг Book book = db.Books.Where(a => a.Title == name).AsQueryable();, но я все равно получаю ту же ошибку ,

+1

'Книга книги = db.Books.FirstOrDefault (а => a.Title == имя);' –

ответ

3

Он возвращает результирующий набор IQueryable. Изменение

Book book = from a in db.Books where a.Title == name select a; 

в

var books = from a in db.Books where a.Title == name select a; 

, а затем вам нужно перебирать на наборе результатов.

Или, если вам нужно только первый набор результатов, то вы можете использовать FirstoreDefault

Book book = db.Books.FirstOrDefault(a => a.Title == name); 
+0

Оказывается, в настоящее время Я получаю 'Невозможно неявно преобразовать тип 'System.Linq.IQueryable ' to'System.Collections.Generic.IList '' –

+0

только что обновленный кодом. – Ehsan

+0

Ну, это сработало, но теперь, когда я перехожу к нему и набираю заголовок, например '/ api/books/Pride', он просто выводит пустую страницу. Вы обнаружите какие-либо другие ошибки с моим кодом? –

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