Wie gebe ich eine IQueryable von Linq an SQL-Abfrage zurück, wenn der dbContext mit einem 'using'-Block ist?

9

Ich habe mit "Verwenden" -Blöcken programmiert, aber ich frage mich, ob ich ein IQueryable aus dem Folgenden zurückgeben kann, ohne dass das Objekt entsorgt wird, bevor ich darauf zugreife.

%Vor%

Lösche ich einfach den 'using'-Block und lasse .Net die Objekte verwalten, oder kann ich Linq veranlassen, die Abfrage frühzeitig auszuführen und das ausgefüllte Objekt zurückzugeben.

    
polom1nt 15.09.2010, 10:52
quelle

4 Antworten

6

Wenn Sie nicht erwarten, die Daten (am DB-Server) weiter zu verfassen, dann:

%Vor%

obwohl ich in diesem Fall lieber IEnumerable<Contact> oder IList<Contact> zurückgeben würde, um die nicht zusammensetzbare Natur offensichtlich zu machen. Mit dem AsQueryable Ansatz ist es immer noch zusammensetzbar, aber es wird über LINQ-to-Objects erstellt (also nachdem es die Datensätze aus der Datenbank abgerufen hat ).

Wenn Sie tun erwarten, es weiter zu verfassen, dann sollten Sie den Datenkontext (oder, falls möglich, ein upstream IQueryable<something> ) in der Methode übergeben, und lassen Sie den Anrufer die Lebensdauer behandeln:

%Vor%     
Marc Gravell 15.09.2010, 10:53
quelle
0

Können Sie das Kontextobjekt zu einer Mitgliedsinstanz Ihrer Klasse machen? Wenn Sie können, können Sie den Aufruf aufschieben, um die Abfrage auszuführen, bis Sie tatsächlich den Enumerator berühren, der der von Ihnen zurückgegebenen IQueryable-Instanz entspricht. Es hängt davon ab, was Sie tun möchten. Müssen Sie IQueryable von dieser Methode zurückgeben, oder können Sie mit IEnumerable auskommen?

    
Øyvind 15.09.2010 10:59
quelle
0

Die Kontaktobjektinstanz in der IQueryable-Ergebnismenge behält den Verweis auf den Datenkontext, der im using-Block verwendet wird, und arbeitet im Client-Code erwartungsgemäß. Sie können verzögerte SQL-Operationen für die resultierende IQueryable-Instanz ausführen und andere IQueryable-Operationen normalerweise ausführen.

    
this. __curious_geek 15.09.2010 11:02
quelle
-1

Sie könnten so etwas tun

%Vor%     
stack72 15.09.2010 10:55
quelle

Tags und Links