How to get IQueryable<> from stored procedure (entity framework)

Posted by mmcteam on Stack Overflow See other posts from Stack Overflow or by mmcteam
Published on 2010-05-05T10:20:44Z Indexed on 2010/05/05 11:48 UTC
Read the original article Hit count: 369

I want to get IQueryable<> result when executing stored procedure.

Here is peace of code that works fine:

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

I can use this to apply global filter, and later use result in such way

result = globbalyFilteredSomeEntities
  .OrderByDescending(se => se.CreationDate)
  .Skip(500)
  .Take(10);

What I want to do - use some stored procedures in global filter.
I tried:

Add stored procedure to m_Entities, but it returns IEnumerable<> and executes sp immediately:

var globbalyFilteredSomeEntities = 
  from se in m_Entities.SomeEntitiyStoredProcedure(1234);

Materialize query using EFExtensions library, but it is IEnumerable<>.
If I use AsQueryable() and OrderBy(), Skip(), Take()
and after that ToList() to execute that query -
I get exception that DataReader is open and I need to close it first(can't paste error - it is in russian).

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

Also just skipping .AsQueryable() is not helpful - same exception.

© Stack Overflow or respective owner

Related posts about entity-framework

Related posts about iqueryable