Entity Framework: come restituire un tipo base da L2E
-
01-07-2019 - |
Domanda
Considerando la seguente architettura:
- un oggetto base 'Entità'
- un oggetto derivato 'Entry: Base'
- e un ulteriore oggetto derivato 'CancelledEntry: Entry'
In EntitySQL posso scrivere quanto segue:
[...] where it is of (only MyEntities.Entry) [...]
per restituire solo oggetti di tipo Entry e nessuna Entity o CancelledEntry.
In linq to sql, il comando seguente restituirà oggetti di tipo Entry e CancelledEntry.
EntityContext.EntitySet.OfType<Entry>()
Qual è la sintassi / funzione da utilizzare per restituire solo oggetti di tipo Voce?
Soluzione
Perché non applichi un metodo di estensione su IQueryable < Voce & Gt; chiamato ApplyBaseEntryFilter () che applica questo filtro e restituisce un IQueryable < Voce & Gt ;.
Questo è un esempio di come riutilizzare i frammenti di query linq. Utilizzo dei metodi di estensione su IQueryable & Lt; Entità & Gt; è un ottimo modo per riutilizzare le query come dovresti fare per copiare e incollare frammenti di query nella tua applicazione, spero che ti siano d'aiuto.
Altri suggerimenti
Ok, ho trovato una soluzione parziale:
EntityContext.EntitySet.OfType<Entry>().Where( obj => !(obj is CancelledEntry) )
Questo è abbastanza terribile, poiché se creo un nuovo oggetto derivato, devo andare in tutte le query e aggiungere una condizione specifica per rimuoverlo.
Deve esserci una soluzione migliore