Ho visto molti progetti con repository che restituiscono istanze di IQueryable. Ciò consente ulteriori filtri e l'ordinamento può essere eseguito su un IQueryablealtro codice, che si traduce in diversi SQL generati. Sono curioso di sapere da dove provenga questo schema e se sia una buona idea.
La mia più grande preoccupazione è che IQueryableè una promessa di colpire il database qualche tempo dopo, quando viene elencato. Ciò significa che un errore verrebbe generato all'esterno del repository. Ciò potrebbe significare che un'eccezione Entity Framework viene generata in un diverso livello dell'applicazione.
In passato ho anche riscontrato problemi con i set di risultati attivi multipli (MARS) (soprattutto quando si utilizzano le transazioni) e questo approccio sembra che ciò comporterebbe che ciò accada più spesso.
Ho sempre chiamato AsEnumerableo ToArrayalla fine di ciascuna delle mie espressioni LINQ per assicurarmi che il database venisse colpito prima di lasciare il codice del repository.
Mi chiedo se la restituzione IQueryablepotrebbe essere utile come blocco predefinito per un livello dati. Ho visto del codice piuttosto stravagante con un repository che chiama un altro repository per crearne uno ancora più grande IQueryable.
whereclausola a un differito IQueryable, devi solo inviare quei dati via cavo, non l'intero set di risultati.