2008-09-20 10 views
0

Compte tenu de l'architecture suivante:Entity Framework: comment retourner un type de base de L2E

  • un objet de base 'entité'
  • un objet dérivé 'Entrée: Base de'
  • et un autre objet dérivé 'CancelledEntry: Entrée'

En EntitySQL je peux écrire ce qui suit:

[...] where it is of (only MyEntities.Entry) [...] 

pour renvoyer uniquement les objets de type Entry et aucune entité ou CancelledEntry. Dans linq to sql, la commande suivante renvoie des objets de type Entry et CancelledEntry.

EntityContext.EntitySet.OfType<Entry>() 

Quelle est la syntaxe/fonction à utiliser pour renvoyer uniquement les objets de type Entrée?

Répondre

2

Pourquoi ne pas appliquer une méthode d'extension sur IQueryable < Entrée> appelé ApplyBaseEntryFilter() qui applique ce filtre et retourner une entrée IQueryable <>.

Ceci est un exemple de réutilisation de fragments de requête linq. Utiliser les méthodes d'extension sur IQueryable < Entity> est un excellent moyen de réutiliser les requêtes car vous ne devriez pas avoir besoin de copier et coller des fragments de requête autour de votre application, espérons que cela vous aidera.

1

Ok, je l'ai trouvé une solution partielle:

EntityContext.EntitySet.OfType<Entry>().Where(obj => !(obj is CancelledEntry)) 

Ceci est tout à fait terrible cependant, car si je crée un nouvel objet dérivé, je dois aller dans toutes les requêtes et ajouter spécifiquement une condition pour enlever il.

Il doit y avoir une meilleure solution

Questions connexes