Un IQueryable (prima che sia enumerato) non è i risultati stessi ma la logica utilizzata per restituire tali risultati.
Per utilizzare un esempio LINQ2SQL ... immagina di restituire un IQueryable di client. Sotto il cofano che non sarà una lista di clienti (fino a quando non ToList()), ma sarà actualy una query SQL in questo modo:
SELECT * FROM [Clients]
Ora, questo è a portata di mano perché non abbiamo colpito la base di dati ancora! Allora supponiamo quando quel IQueriable torna vogliamo perfezionare il basso per i clienti chiamato "Bob" che possiamo fare:
var clients = GetClients().Where(c => c.Name == "Bob");
Ora l'IQueriable assomiglia a questo sotto il cofano:
SELECT * FROM [Clients] WHERE Name = 'Bob'.
Ora, quando Io faccio clients.ToList(), quella query verrà eseguita, il database verrà colpito e io ho un elenco di client chiamato bob senza dover selezionare tutti i client quindi scorrere attraverso di essi in memoria, o eseguire 2 hit di database separati.
Per un esempio di questo ti morde nel dietro prova e ottenere elementi figlio quando il tuo datacontext ha abbandonato l'ambito (ad esempio: eseguire la selezione all'interno di un'istruzione using). È qui che le opzioni di caricamento sono utili, in LINQ2SQL.
Speranza che aiuti
ottima domanda. mi hai risparmiato ore di ricerca. – KyleM