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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top