2010-07-12 2 views
0

Disons que nous avons des tables nommées A, B, C. C dérivé de B et B dérivé de A. Donc, si je veux obtenir la table C, OfType (C) apportera le résultat attendu. Mais si j'ai écrit OfType (B) résultat inclura les entrées de la table C.Dérivation 2 fois sur Entity Framework

Comment puis-je obtenir le résultat juste pour B? Y a-t-il une meilleure solution de Entity Framework?

Répondre

2

Il y a probablement une meilleure/plus rapide/plus sexy façon de le faire, mais vous pouvez toujours faire quelque chose avec LINQ:

var results = yourCollectionOfBsAndCs.Where(o => !(o is C)); 
+0

j'ai essayé de écrit requête LINQ pour quand je traitais que tout en apprenant, mais je ne pouvais pas écrire requête simple comme u a fait – Freshblood

+0

@Freshblood: Ce qui est arrivé lorsque vous avez essayé cela? Quelles erreurs voyez-vous? –

+0

Désolé, le test a pris du temps. Maintenant je l'ai testé et cela fonctionne comme prévu :) – Freshblood

0

Si nous essayons d'exclure les classes héritées si nous devons écrire tous et nous devrait mettre à jour notre code s'il y aura d'autres classes héritées à l'avenir. Donc, au lieu d'eux, ce code sera une meilleure solution.

//collection include classes A and inherited classes from A. 
collection.Where(o => o.GetType() == typeof(A)); 
+0

Mais il y a encore un problème ici. Lorsque j'essaie de créer un résultat de boucle dans foreach, l'exception "LINQ to Entities ne reconnaît pas la méthode" System.Type GetType() "de la méthode, et cette méthode ne peut pas être traduite dans une expression de magasin." – Freshblood