【问题标题】:Cannot implicitly convert type 'System.Data.Entity.Infrastructure.DbSqlQuery’ to 'System.Linq.IQueryable’无法将类型“System.Data.Entity.Infrastructure.DbSqlQuery”隐式转换为“System.Linq.IQueryable”
【发布时间】:2016-11-09 19:41:53
【问题描述】:

我创建了一个实体框架 API 控制器,现在我正在尝试从以下位置调整我的 GetData() 方法:

public IQueryable<VIPPreviewTimeSlots> GetData()
{
    return db.Data;
}

到

public IQueryable<VIPPreviewTimeSlots> GetData()
{
    return db.Data.SqlQuery("SELECT a,b,c FROM table INNER JOIN another table....");
}

但我收到此错误:

Cannot implicitly convert type 'System.Data.Entity.Infrastructure.DbSqlQuery’ to 'System.Linq.IQueryable’

如何将其转换为 IQueryable?

【问题讨论】:

  • 我认为将 .AsQueryable() 添加到您的 return 语句的末尾会起作用。但是,根据this SO question 你不能。您可以更改函数签名以返回 IEnumerable
  • .AsQueryable() 工作!
  • @PaulStoner 这个答案是关于在.SqlQuery 上调用.AsQueryable。将函数签名更改为 IEnumerable 将导致它不再能够延迟链接。之后的一切都将在客户端而不是服务器端完成。 .AsQueryable 是这里的正确答案(实际上它也是您链接问题的正确答案,但它可能对 .SqlQuery 有性能影响,而这里没有。
  • @RobertMcKee 感谢您的意见。我个人认为 AsQueryable() 会像我在类似情况下使用过的那样工作,但不适用于 EF。永远感谢您的意见,

标签: c# asp.net entity-framework linq


【解决方案1】:

尝试使用 AsQuearable()。但正如我在评论中指出的那样,这可能会产生影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多