Ho davvero bisogno di usare AsQueryable() sulla raccolta?

Ho davvero bisogno di usare AsQueryable() sulla raccolta?

IQueryable è richiesto/consigliato per oggetti provenienti da un'origine remota (come dal database).

Perché nelle raccolte di memoria non è di alcuna utilità.

AsQueryable viene utilizzato quando deve essere costruito un albero delle espressioni.

Posso pensare allo scenario in cui è più adatto. Nel tuo esempio supponiamo che tu abbia bisogno di alcune informazioni dal database in base all'ID studente.

Ora lo studente è nella raccolta della memoria. Devi attivare la query del database in base all'ID studente.

  var studentList = Students.Select(s => s.Id).AsQueryAble().Select(i => remoteDBProvider.GetInfo(i));

Qualsiasi ulteriore operazione sulla studentList verrà richiamata dall'interfaccia IQueryAble (espressione della query) e recupererà solo quei record dall'origine dati, che dovrebbero essere restituiti come risultato finale della query (purché origine dati, valore restituito di remoteDBProvider.GetInfo nell'esempio, supporta QueryProvider).


Deve fare come viene costruito l'albero delle espressioni. Guarda questo:

Fare riferimento qui


Nel caso del tuo List<Student> , non fa alcuna differenza, poiché il IQueryable<T> restituito utilizzerà gli stessi metodi per interrogare come se non avessi usato AsQueryable() affatto.

Alcuni metodi prevedono un IQueryable<T> parametro. Penso che il AsQueryable() il metodo di estensione è utile principalmente per quegli scenari, quando devi passare un IQueryable<T> ma hai solo un IEnumerable<T> .

MSDN dice su AsQueryable :

Quindi questo significa nel tuo caso (List<T> non implementa IQueryable<T> ), non hai davvero bisogno di AsQueryable .