2010-12-08 5 views
2

Je crois que je suis en train de faire ce qui suit:Entity Framework 4: Quelles sont les causes .Take (10) pour retourner 20 enregistrements?

var myQuery = Products.Where(p => p.deptid = 3); 
var myCount = Products.Count(); 
var myResult = myQuery.OrderBy(p => p.deptname).Skip(10).Take(10); 
//then return an object with a count property and a List<Product> property. 

Parfois, cela renvoie le double du montant de prise.

Il y a quelques couches dans ma solution, à savoir un référentiel et une couche de service. Je suis à peu près sûr que je ne commande pas, ne saute pas, et ne prends pas dans mon référentiel, et c'est le code de couche de service. Qu'est-ce qui pourrait faire que myResult ait plus de 10 enregistrements quand je prends 10 enregistrements?

+0

Peut-être montrer comment vous "renvoyez un objet avec une propriété count et une propriété List " –

+0

Que voulez-vous dire par 'Sometimes'? dans ce cas, combien d'articles figurent dans votre liste de produits, et dans d'autres cas, combien y en a-t-il? Je parie que vous devriez avoir d'autres codes qui cause ce problème. pour voir cela, ajoutez '.ToList()' à la fin de Take (10) –

+0

Yep, quelque chose d'autre est à l'origine du problème. Tout d'abord, vous avez '.Take (10)' mais pas '.ToList()' à la fin. Donc 'myResult' est un' IQueryable '. Affiche le code dans lequel vous matérialisez une requête dans une collection concrète. – RPM1984

Répondre

1

Je suis assez sûr que j'ai fait un OrderBy() puis fait un autre OrderBy(). Skip(). Take(). Le Skip(). Take() a probablement utilisé l'ID interne pour sélectionner les enregistrements.

J'ai parcouru toutes les couches d'application pour m'assurer qu'un seul OrderBy(). Skip(). Take() s'est produit, et tout a été corrigé.

Cependant, je ne peux pas recréer le problème pour me sauver la vie. Je ne sais pas si c'était la solution.

+0

Craie l'un de ces gremlins mystères dans EF. – NotMe

Questions connexes