无法隐式转换 System.LINQ 存在显式转换,是否缺少强制转换



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

无法隐式转换类型 'System.Linq.Iqueryable' to 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()

最新更新