.net - IQueryable<> 来自存储过程( Entity Framework )

标签 .net entity-framework stored-procedures linq-to-entities iqueryable

我要获取IQueryable<>执行存储过程时的结果。

这是一段运行良好的代码:

IQueryable<SomeEntitiy> someEntities;  
var globbalyFilteredSomeEntities = 
  from se in m_Entities.SomeEntitiy
    where
      se.GlobalFilter == 1234 
  select se;

我可以用它来应用全局过滤器,然后在类似的东西中使用结果:
result = globbalyFilteredSomeEntities
  .OrderByDescending(se => se.CreationDate)
  .Skip(500)
  .Take(10);

我想要做什么 - 在全局过滤器中使用一些存储过程。
我试过:

将存储过程添加到 m_Entities ,但它返回 IEnumerable<>并立即执行 sp:
var globbalyFilteredSomeEntities = 
  from se in m_Entities.SomeEntitiyStoredProcedure(1234);

使用 EFExtensions 库实现查询,但它是 IEnumerable<> .
如果我使用 AsQueryable()OrderBy() , Skip() , Take()之后 ToList()执行该查询 -
我得到异常(exception) DataReader已打开,我需要先关闭它(无法粘贴错误 - 它是俄语)。
var globbalyFilteredSomeEntities = 
  m_Entities.CreateStoreCommand("exec SomeEntitiyStoredProcedure(1234)")
            .Materialize<SomeEntitiy>();
            //.AsQueryable()
            //.OrderByDescending(se => se.CreationDate)
            //.Skip(500)
            //.Take(10)
            //.ToList();   

也只是跳过 .AsQueryable()没有帮助 - 同样的异常(exception)。
当我放 ToList()查询执行,
但是在没有 Skip() 的情况下执行查询太昂贵了, Take() .

最佳答案

您不能做您想做的事情,原因与不能将存储过程放在 SELECT 查询的 FROM 子句中的原因相同——SQL 的构建不是为了支持这种操作。

你能把你想要的逻辑放在一个 View 而不是一个存储过程中吗?

关于.net - IQueryable<> 来自存储过程( Entity Framework ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772295/

相关文章:

c# - 为什么 WebApi Controller 运行后没有人处理 DbContext?

c# - 从 dapper 调用存储过程,它接受用户定义的表类型列表

sql - HSQLDB:如果存储过程已存在,则创建该存储过程时出错

c# - .NET 应用程序使用 PHP/MYSQL 进行身份验证?

c# - 如何将枚举值传递给@Html.ActionLink

c# - 使用 .NET 生成具有给定扩展名的唯一临时文件名

sql-server - 在存储过程中的 'SET'关键字附近获取错误

c# - var 和 Class 类在对象创建上的区别

c# - 将 LINQ 查询作为字符串发送到 Entity Framework

c# - EF Core 包含多层次问题