来自存储过程的IQueryable <>(实体框架)

are*_*-ru 9 .net linq-to-entities stored-procedures entity-framework iqueryable

我想IQueryable<>在执行存储过程时获得结果.

这是代码的和平工作正常:

IQueryable<SomeEntitiy> someEntities;  
var globbalyFilteredSomeEntities = 
  from se in m_Entities.SomeEntitiy
    where
      se.GlobalFilter == 1234 
  select se;
Run Code Online (Sandbox Code Playgroud)

我可以使用它来应用全局过滤器,然后以这种方式使用结果

result = globbalyFilteredSomeEntities
  .OrderByDescending(se => se.CreationDate)
  .Skip(500)
  .Take(10);
Run Code Online (Sandbox Code Playgroud)

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

添加存储过程m_Entities,但它会IEnumerable<>立即返回并执行sp:

var globbalyFilteredSomeEntities = 
  from se in m_Entities.SomeEntitiyStoredProcedure(1234);
Run Code Online (Sandbox Code Playgroud)

使用EFExtensions库实现查询,但确实如此IEnumerable<>.
如果我使用AsQueryable()OrderBy(),Skip(),Take()
,之后ToList()执行该查询-
我得到异常DataReader是开放的,我需要先关闭它(不能粘贴错误-这是俄语).

var globbalyFilteredSomeEntities = 
  m_Entities.CreateStoreCommand("exec SomeEntitiyStoredProcedure(1234)")
            .Materialize<SomeEntitiy>();
            //.AsQueryable()
            //.OrderByDescending(se => se.CreationDate)
            //.Skip(500)
            //.Take(10)
            //.ToList();   
Run Code Online (Sandbox Code Playgroud)

也只是跳过.AsQueryable()没有帮助 - 同样的例外.
当我ToList()执行查询执行时,
执行查询没有太昂贵Skip(),Take().

Dam*_*ver 8

你无法做你想做的事情,原因与你不能将存储过程放在SELECT查询的FROM子句中的原因相同 - 不构建SQL来支持这种操作.

你能把你想要的逻辑放到视图而不是存储过程吗?