【问题标题】:cannot implicitly convert System.LINQ an explicit conversion exists are you missing a cast无法隐式转换 System.LINQ 存在显式转换您是否缺少演员表
【发布时间】:2020-01-01 02:02:06
【问题描述】:

我目前正在尝试使用 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);
    }

【问题讨论】:

  • 发布错误的全文,并告诉我们是哪一行代码导致了它。
  • 刚刚做了修改
  • 是的。现在阅读错误消息。你错过了演员表吗?

标签: javascript api model-view-controller typeahead.js


【解决方案1】:

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

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

应该是

vmrsQuery = vmrsQuery.Where(c =&gt; c.Description.Contains(query));

另外,您可能需要明确定义变量。

var vmrsQuery = _context.VMRS;

应该是

IQueryable&lt;VMRS&gt; vmrsQuery = _context.VMRS;

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

你也可以只输入_context.VMRS.AsQueryable()

【讨论】:

  • IQueryable vmrsQuery = _context.VMRS;是什么解决了它。非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多