我已经实现了twitter的typeahead插件,可以在我的应用程序中自动完成表单。
当查询数据库以匹配在输入框中输入的名称时,它只会匹配区分大小写的名称,但是应该提前键入不区分大小写的名称。
例如:凯文·史密斯(Kevin S)暗示凯文·史密斯(Kevin Smith),但凯文·史密斯(kevin s)毫不暗示。
API代码
// GET: /api/authors
public IHttpActionResult GetAuthors(string query = null)
{
var authorsQuery = _context.Authors.ToList().Select(Mapper.Map<Author, AuthorDto>);
if (!String.IsNullOrWhiteSpace(query))
authorsQuery = authorsQuery.Where(c => c.Name.Contains(query));
return Ok(authorsQuery);
}
我认为这与.ToList()的执行有关,然后才通过.Where()调用查询数据库。
我将代码更改为此,现在可以正常工作
// GET: /api/authors
public IHttpActionResult GetAuthors(string query = null)
{
var authorsQuery = _context.Authors.AsQueryable();
if (!String.IsNullOrWhiteSpace(query))
authorsQuery = authorsQuery.Where(c => c.Name.Contains(query));
var authorsDto = authorsQuery.ToList().Select(Mapper.Map<Author, AuthorDto>);
return Ok(authorsDto);
}
因此,在输入“ kevin s”时,建议输入“ Kevin Smith”
我尝试使用AsEnumerable而不是AsQueryable()进行操作,它的效果与原始代码相同
为什么它可以与AsQuerable一起使用,但不能与其他人一起使用呢?与查询执行有关吗?
潇潇雨雨
相关分类