В моем приложении реализован плагин typeahead для автоматического заполнения форм.
При запросе базы данных на совпадение с именем, введенным в поле ввода, он будет соответствовать только чувствительным к регистру именам, однако предполагается, что typeahead соответствует нечувствительному к регистру.
пример: тип "Кевин С" предлагает Кевина Смита, но тип "Кевин С" ничего не предлагает.
Код 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» typeahead предлагает «Kevin Smith»
Я пытался использовать AsEnumerable вместо AsQueryable (), и он имел тот же эффект, что и исходный код
почему он работает с AsQuerable, а не с другими? это связано с выполнением запроса?