IQueryable<> partir d'une procédure stockée (entity framework)

Je veux obtenir IQueryable<> résultat lors de l'exécution de la procédure stockée.

Ici, c'est la paix de code qui fonctionne très bien:

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

Je peux l'utiliser pour appliquer le filtre global, et plus tard utiliser le résultat d'une telle façon

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

Ce que je veux faire - utiliser certaines procédures stockées dans le filtre global.

J'ai essayé:

Ajouter procédure stockée pour m_Entities, mais il renvoie IEnumerable<> et exécute sp immédiatement:

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

Matérialiser requête à l'aide de EFExtensions de la bibliothèque, mais il est IEnumerable<>.

Si j'utilise AsQueryable() et OrderBy(), Skip(), Take()

et après que ToList() pour l'exécution de cette requête

Je reçois exception que DataReader est ouvert et j'ai besoin de fermer d'abord(ne peut pas coller de l'erreur - c'est en russe).

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

Aussi juste sauter .AsQueryable() n'est pas utile - même une exception.

Quand j'ai mis ToList() requête s'exécute,

mais c'est trop cher pour exécuter la requête, sans Skip(), Take().

  • Est-ce EF 4? Si oui, utiliser ExecuteStoreQuery, et puis vous n'aurez pas besoin Materialize.
  • Non, c'est EF 1, mais si ExecuteStoreQuery résout mon problème, je vais envisager de passer à EF4. Pouvez-vous partager quelques liens vers des articles spéciaux à ce sujet(si vous en avez).
  • J'ai vu stackoverflow.com/questions/2201369/... et il est indiqué qu' ExecuteStoreQuery retourne ObjectResult de la collection - même comme m_Entities.SomeEntitiyStoredProcedure(1234);. Semble que ExecuteStoreQuery ne permettra pas de résoudre mon problème.
  • OK, je vois ce que vous dites. Ce (Take()...) n'est pas possible, parce que si vous écrivez le SQL, l'EF ne peut plus composer que SQL. Toutefois, si vous ne l'utilisez ExecuteStoreQuery ensuite, vous pouvez utiliser TOP et la comme dans le SQL que vous écrivez.
  • Ne ExecuteStoreQuery retour ObjectResult ou de retour ObjectQuery? Si elle renvoie ObjectResult - il est inutilisable pour moi.
InformationsquelleAutor arena-ru | 2010-05-05