Linq 按名称而不是id搜索

Linq 按名称而不是id搜索,linq,asp.net-web-api2,Linq,Asp.net Web Api2,我正在学习Asp.net web api 2.0,当前的CRUD方法只是按id搜索,所以我尝试按书名搜索,但没有成功 我添加到WebApiConfig.cs的内容: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{name}", defaults: new { name = RouteParameter.Optional } }; 我遇到的问题是: //

我正在学习Asp.net web api 2.0,当前的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查询的那一行,我得到一个错误:
无法将类型“System.LINQ.IQueryable”隐式转换为“BookService.Models.Book”。


我尝试将查询改为
Book Book=db.Books.Where(a=>a.Title==name.AsQueryable()但我仍然得到相同的错误。

它返回的结果集为。改变

然后需要对结果集进行迭代

或者,如果只需要第一个结果集,则可以使用


它返回的结果集为。改变

然后需要对结果集进行迭代

或者,如果只需要第一个结果集,则可以使用


Book Book=db.Books.FirstOrDefault(a=>a.Title==name)
Book Book=db.Books.FirstOrDefault(a=>a.Title==name)现在看来,我无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IList”
,但现在当我导航到它并键入一个标题,如
/api/books/Pride
时,它只会显示一个空白页。你看到我的代码还有其他错误吗?啊,完全是我的错,是在寻找傲慢与偏见,所以我不得不把
(a=>a.Title.Contains(name))现在看来,我无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IList”
,但现在当我导航到它并键入一个标题,如
/api/books/Pride
时,它只会显示一个空白页。你看到我的代码还有其他错误吗?啊,完全是我的错,是在寻找傲慢与偏见,所以我不得不把
(a=>a.Title.Contains(name))
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;
Book book = db.Books.FirstOrDefault(a => a.Title == name);