我目前正在尝试使用API​​搜索查询来实现TypeAhead插件。下面的代码是我从udemy类Mosh(https://github.com/mosh-hamedani/vidly-mvc-5/blob/master/Vidly/Controllers/Api/CustomersController.cs)收到的摘录。实现以下代码后,我收到以下错误


  无法隐式转换类型
  'System.Linq.Iqueryable'到
  System.Data.Entity.DbSet”。存在显式转换
  (您是否缺少演员)?


这发生在这行代码上

vmrsQuery = vmrsQuery.Where(c => c.Description.Contains(query));


是否有其他人有变通办法才能使其正常运行?

public IHttpActionResult GetVMRS(string query = null)
    {

        var vmrsQuery = _context.VMRS;

        if (!String.IsNullOrWhiteSpace(query))
            vmrsQuery = vmrsQuery.ToList().Where(c => c.Description.Contains(query));

        var vmrsDtos = vmrsQuery
            .ToList()
            .Select(Mapper.Map<VMRS, VMRSDto>);

        return Ok(vmrsDtos);
    }

最佳答案

您不应直接在上下文中调用ToList()。这将在执行where子句之前将数据库中的每一行都拉到内存中。

vmrsQuery = vmrsQuery.ToList().Where(c => c.Description.Contains(query));

应该

vmrsQuery = vmrsQuery.Where(c => c.Description.Contains(query));

另外,您可能需要显式定义变量。

var vmrsQuery = _context.VMRS;

应该

IQueryable<VMRS> vmrsQuery = _context.VMRS;

这是因为如果使用实体框架,则上下文可能是DbSet。

您也可以将_context.VMRS.AsQueryable()

10-07 12:13