IQueryable aus der gespeicherten Prozedur (Entitätsframework)

9

Ich möchte IQueryable<> result beim Ausführen der gespeicherten Prozedur erhalten.

Hier ist Code-Frieden, der gut funktioniert:

%Vor%

Ich kann das verwenden, um den globalen Filter anzuwenden, und benutze später das Ergebnis auf diese Weise

%Vor%

Was ich machen möchte - benutze einige gespeicherte Prozeduren im globalen Filter.
Ich habe es versucht:

Fügen Sie gespeicherte Prozedur zu m_Entities hinzu, aber es gibt IEnumerable<> zurück und führt sp sofort aus:

%Vor%

Materialize-Abfrage mit der EFExtensions-Bibliothek, aber es ist IEnumerable<> .
Wenn ich AsQueryable() und OrderBy() , Skip() , Take()
verwende und danach ToList() , um diese Abfrage auszuführen -
Ich bekomme eine Ausnahme, dass DataReader offen ist und ich muss es zuerst schließen (kann nicht einfügen Fehler - es ist in russischer Sprache).

%Vor%

Auch das Überspringen von .AsQueryable() ist nicht hilfreich - gleiche Ausnahme.
Wenn ich ToList() query ausführt, führt
aus aber es ist zu teuer, die Abfrage ohne Skip() , Take() auszuführen.

    
arena-ru 05.05.2010, 10:20
quelle

3 Antworten

8

Sie können nicht tun, was Sie versuchen, aus dem gleichen Grund, weil Sie eine gespeicherte Prozedur nicht in eine FROM-Klausel einer SELECT-Abfrage einfügen können - SQL ist nicht dafür ausgelegt, diese Art von Operation zu unterstützen.

Könnten Sie die gewünschte Logik in eine Ansicht anstatt in eine gespeicherte Prozedur einfügen?

    
Damien_The_Unbeliever 05.05.2010, 14:47
quelle
1

Sie können ein Projekt verwenden, das ich LinqToAnything erstellt habe, mit dem Sie eine nicht-abfragbare Datenzugriffsmethode erstellen und in eine IQueryable.

Ich habe einen Blogbeitrag hier zur Verwendung.

    
mcintyre321 24.06.2015 16:33
quelle
-1

Natürlich können Sie diese Probleme mit ToList ()

umgehen %Vor%

Warum können Sie das Skip () und Take () nicht auf dem Enumerable tun? Dadurch werden nur die Ergebnisse heruntergeladen, die übersprungen oder genommen wurden, die anderen werden nicht gelesen.

Bearbeiten: Die vorherige Version war in vielerlei Hinsicht falsch.

    
erikkallen 05.05.2010 11:44
quelle